Text-Datei lesen und bearbeiten
Hallo Zusammen
Ich möchte bei einer .txt-Datei bestimmte Buchstaben auswechseln durch andere. Dies möchte ich mit jedem Buchstabe in der Ganzen Datei machen. Problem ist, es sind immer andere Texte, das heisst ich weiss nicht wie viele Zeichen, Absätze es sind.
Diese Abänderung soll nur erfolgen, wenn in der ersten Zeile ein bestimmter Wert vorhanden ist.
Der Aufwand spielt keine grosse Rolle, denn ich will es mit Batch realisieren...
Hoffentlich kennt ihr eine Möglichkeit... =)
Ich möchte bei einer .txt-Datei bestimmte Buchstaben auswechseln durch andere. Dies möchte ich mit jedem Buchstabe in der Ganzen Datei machen. Problem ist, es sind immer andere Texte, das heisst ich weiss nicht wie viele Zeichen, Absätze es sind.
Diese Abänderung soll nur erfolgen, wenn in der ersten Zeile ein bestimmter Wert vorhanden ist.
Der Aufwand spielt keine grosse Rolle, denn ich will es mit Batch realisieren...
Hoffentlich kennt ihr eine Möglichkeit... =)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 88741
Url: https://administrator.de/contentid/88741
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
22 Kommentare
Neuester Kommentar
Und dann vermutlich auch keinen Compiler ...
Vielleicht weiß hier ja jemand, wie das per Batch geht , also erst mal abwarten. Wenn nichts kommt, mußt Du mir mal die genaue Aufgabenstellung beschreiben (also welche Zeichen ausgetauscht werden sollen, ob es eine bestimmte, vorauszuwählende Datei ist oder mehrere Dateien, die automatisch verarbeitet werden sollen und so weiter). Wenn ich Zeit habe, kann ich Dir dann ein Tool schreiben ...
Vielleicht weiß hier ja jemand, wie das per Batch geht , also erst mal abwarten. Wenn nichts kommt, mußt Du mir mal die genaue Aufgabenstellung beschreiben (also welche Zeichen ausgetauscht werden sollen, ob es eine bestimmte, vorauszuwählende Datei ist oder mehrere Dateien, die automatisch verarbeitet werden sollen und so weiter). Wenn ich Zeit habe, kann ich Dir dann ein Tool schreiben ...
Nun ja, das Verfahren ist klar:
- die Quelldatei Zeichen für Zeichen einlesen
- dabei prüfen ob das gerade eingelesene Zeichen das zu ersetzende ist und es dann ersetzen
- das gerade ausgelesene (bzw. ggf. geänderte) Zeichen in die Zieldatei speichern
- nachdem die Datei vollständig verarbeitet wurde ggf. die Quelldatei löschen und die Zieldatei auf den ursprünglichen Namen der Quelldatei umbenennen
In Basic wüßte ich auch, wie das zu bewerkstelligen ist, in Batch hingegen nicht.
- die Quelldatei Zeichen für Zeichen einlesen
- dabei prüfen ob das gerade eingelesene Zeichen das zu ersetzende ist und es dann ersetzen
- das gerade ausgelesene (bzw. ggf. geänderte) Zeichen in die Zieldatei speichern
- nachdem die Datei vollständig verarbeitet wurde ggf. die Quelldatei löschen und die Zieldatei auf den ursprünglichen Namen der Quelldatei umbenennen
In Basic wüßte ich auch, wie das zu bewerkstelligen ist, in Batch hingegen nicht.
Moin DexXxtrin,
willkommen im Forum.
Als Moderator von "Batch & Shell" weise ich jede Zuständigkeit für Deine Anforderung weit von mir.
Dafür sind die mitgelieferten Batch-Befehle NICHT sinnvoll geeignet.
Batch arbeitet ZEILEN-orientiert, Du brauchst etwas ZEICHEN-orientiertes.
Ricky99's Tipp mit SED ist goldrichtig und ich würde Dich auch bitten, erst mal dem oben geposteten Link zu folgen und (sei tapfer) es damit auch zu versuchen.
Warnung: es sieht absolut unverständlich aus ...aber nur auf den ersten Blick.
Wenn Du es versucht hast und nicht zu einem Erfolgserlebnis kommen solltest, dann machen wir hier weiter.
Grüße
Biber
willkommen im Forum.
Als Moderator von "Batch & Shell" weise ich jede Zuständigkeit für Deine Anforderung weit von mir.
Dafür sind die mitgelieferten Batch-Befehle NICHT sinnvoll geeignet.
Batch arbeitet ZEILEN-orientiert, Du brauchst etwas ZEICHEN-orientiertes.
Ricky99's Tipp mit SED ist goldrichtig und ich würde Dich auch bitten, erst mal dem oben geposteten Link zu folgen und (sei tapfer) es damit auch zu versuchen.
Warnung: es sieht absolut unverständlich aus ...aber nur auf den ersten Blick.
Wenn Du es versucht hast und nicht zu einem Erfolgserlebnis kommen solltest, dann machen wir hier weiter.
Grüße
Biber
Nur mal als Tipp: Die meisten Mitglieder hier verstehen administrator.de als Hilfe zur Selbsthilfe. Hast Du Dir mal die Mühe gemacht, Dich etwas in die Seite einzulesen, die Ricky99 Dir empfohlen hat? Wenn es dann für Dich nicht geeignet ist, können wir immer noch weitersehen, ob wir eine andere Lösung finden, aber erst mal solltest Du (selber) prüfen, ob der Lösungsvorschlag geeignet ist ...
Hallo DexXxtrin!
Auch wenn ich mich grundsätzlich dem "sed"-Vorschlag anschließe, wäre auch (zur Not) eine Lösung mit Batch machbar (abhängig von den sonstigen Inhalten der .txt-Datei), allerdings hat auch Biber schon darauf hingewiesen, dass das nicht das richtige Werkzeug für Dein Vorhaben ist - besser geeignet ist zB, wie von SarekHL vorgeschlagen, Basic.
Um dennoch mit Bordmitteln (und tatsächlich ein wenig Batch) an die Sache heranzugehen, könntest Du es (unter Verwendung von temporärem VBScript) etwa so anlegen:
Die Ersetzung erfolgt "in" der Quelldatei (gemeint ist, dass keine Sicherungskopie angelegt wird, sondern die Ausgangsdatei durch die neue Version ersetzt wird) und ist "case sensitive" (berücksichtigt Groß-/Kleinschreibung - "X" wird ersetzt, "x" nicht).
Trotzdem noch einmal zurück zu "sed":
Grüße
bastla
[Edit] Der horizontale Scrollbalken für Codeblöcke ist offensichtlich Rationalisierungsmaßnahmen zum Opfer gefallen ... Wenn Du den Code als "Quelltext" anzeigst oder "in den Speicher kopierst" bekommst Du aber die vollständige Zeile 7 geliefert. [/Edit]
[Edit2 by Biber] Den Bug sehe ich auch (im IE6). Habe es als Bug #490 eingetragen. [/Edit2]
Auch wenn ich mich grundsätzlich dem "sed"-Vorschlag anschließe, wäre auch (zur Not) eine Lösung mit Batch machbar (abhängig von den sonstigen Inhalten der .txt-Datei), allerdings hat auch Biber schon darauf hingewiesen, dass das nicht das richtige Werkzeug für Dein Vorhaben ist - besser geeignet ist zB, wie von SarekHL vorgeschlagen, Basic.
Um dennoch mit Bordmitteln (und tatsächlich ein wenig Batch) an die Sache heranzugehen, könntest Du es (unter Verwendung von temporärem VBScript) etwa so anlegen:
@echo off & setlocal
set "Quelle=D:\Dein Text.txt"
set "Von=X"
set "Nach=Y"
set R=%temp%\Repl.vbs
echo Set fso=CreateObject("Scripting.FileSystemObject"):F=WScript.Arguments(0):T=fso.OpenTextFile(F).ReadAll:fso.OpenTextFile(F,2,True).Write Replace(T,"%Von%","%Nach%")>%R%
cscript //nologo %R% "%Quelle%"
Trotzdem noch einmal zurück zu "sed":
Funktioniert SED auch mit dem normalen Windows-Editor und dann als BATCH? Oder braucht man da seperate Programme?
Du brauchst eine Windows-Version ("sed.exe"), welche Du dann als Filter in einer Batch-Zeile verwenden kannst.Grüße
bastla
[Edit] Der horizontale Scrollbalken für Codeblöcke ist offensichtlich Rationalisierungsmaßnahmen zum Opfer gefallen ... Wenn Du den Code als "Quelltext" anzeigst oder "in den Speicher kopierst" bekommst Du aber die vollständige Zeile 7 geliefert. [/Edit]
[Edit2 by Biber] Den Bug sehe ich auch (im IE6). Habe es als Bug #490 eingetragen. [/Edit2]
Hallo DexXxtrin!
In Deinem Fall wäre das etwa so:
Ablauf:
Es genügt also letztlich eine Zeile Batch ...
Grüße
bastla
In Deinem Fall wäre das etwa so:
type "D:\Dein Text.txt"|sed s/X/Y/g>"D:\Dein neuer Text.txt"
- Ausgabe der Quelldatei,
- filtern mit "sed" (die "sed.exe" muss im Pfad %path% auffindbar sein oder mit vollständigem Pfad, zB "C:\Tools\sed", angegeben werden); wobei mit dem "g" am Ende "globales Ersetzen" (= alle Vorkommen von "X" innerhalb der Datei werden durch "Y" ersetzt) festgelegt wird, und
- Schreiben (per Umleitung) der (veränderten) Ausgabe in eine neue Datei.
Es genügt also letztlich eine Zeile Batch ...
Grüße
bastla
Hallo DexXxtrin!
Die Variable %path% solltest Du auf keinen Fall durch einen neuen Eintrag ersetzen, sondern nur ergänzen - gemeint war aber eigentlich, dass die "sed.exe" in einem Verzeichnis, das im schon vorhandenen %path% steht, abgelegt sein sollte (zB C:\Windows\System32).
Versuch es aber einfach so:
Übrigens sind manchmal auch leere Dateien lehrreich ...
Das "s" nach "sed" (und vor "/x/y/g") steht übrigens für "substitute", und das willst Du ja eigentlich machen [Edit] ... oder eigentlich auch wieder nicht, wenn es ja jeweils nur ein einzelnes Zeichen sein soll, daher ist "y" schon OK ... [/Edit]
Grüße
bastla
Die Variable %path% solltest Du auf keinen Fall durch einen neuen Eintrag ersetzen, sondern nur ergänzen - gemeint war aber eigentlich, dass die "sed.exe" in einem Verzeichnis, das im schon vorhandenen %path% steht, abgelegt sein sollte (zB C:\Windows\System32).
Versuch es aber einfach so:
type "D:\Text.txt"|"Pfad von sed.exe\sed" s/x/y/g>"D:\Text1.txt"
Das "s" nach "sed" (und vor "/x/y/g") steht übrigens für "substitute", und das willst Du ja eigentlich machen [Edit] ... oder eigentlich auch wieder nicht, wenn es ja jeweils nur ein einzelnes Zeichen sein soll, daher ist "y" schon OK ... [/Edit]
Grüße
bastla
Moin,
und es könnte sinnvoller sein, wie bastla auch oben gepostet hat, von einer Datei in eine andere zu schreiben (Datei->DateiNeu) und gegebenfalls danach unzubenennen.
Sonst bleibt die Zieldatei nämlich im Fehlerfall leer und es lässt sich dann nur begrenzt wiederholen.
Grüße
Biber
P.S. Ich verkneife es mir schon seit Stunden: wofür ist denn dieses Krams?
Verschlüsselung von Schulhof-Post?
und es könnte sinnvoller sein, wie bastla auch oben gepostet hat, von einer Datei in eine andere zu schreiben (Datei->DateiNeu) und gegebenfalls danach unzubenennen.
Sonst bleibt die Zieldatei nämlich im Fehlerfall leer und es lässt sich dann nur begrenzt wiederholen.
Grüße
Biber
P.S. Ich verkneife es mir schon seit Stunden: wofür ist denn dieses Krams?
Verschlüsselung von Schulhof-Post?