dexxxtrin
Goto Top

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... =)

Content-ID: 88741

Url: https://administrator.de/contentid/88741

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

SarekHL
SarekHL 29.05.2008 um 18:03:33 Uhr
Goto Top
Per Batch wüßte ich keine Lösung, aber es wäre ein leichtes, ein kleines Basic-Programm zu schreiben, daß diese Aufgabe vollbringt ...
DexXxtrin
DexXxtrin 29.05.2008 um 18:04:59 Uhr
Goto Top
Das Problem ist, ich habe keine Ahnung von Basic...
SarekHL
SarekHL 29.05.2008 um 18:09:37 Uhr
Goto Top
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 ...
DexXxtrin
DexXxtrin 29.05.2008 um 18:14:19 Uhr
Goto Top
Es handelt sich um eine Datei, welche der Benutzer festlegt (dieser Bereich habe ich bereits, fehlt nur noch das abändern).
SarekHL
SarekHL 29.05.2008 um 18:17:28 Uhr
Goto Top
Und dort soll ein Zeichen durch ein anderes ersetzt werden? Handelt es sich immer um das gleiche Zeichen-Paar?
Ricky99
Ricky99 29.05.2008 um 18:23:31 Uhr
Goto Top
Guck Dir doch mal den SED-Editor an ...

http://sed.sourceforge.net/

Grüße,

Ralf.
DexXxtrin
DexXxtrin 29.05.2008 um 18:39:13 Uhr
Goto Top
Ist das eine eingene Sprach, odar ist das eine Funktion mit Batch?
DexXxtrin
DexXxtrin 29.05.2008 um 18:45:39 Uhr
Goto Top
Es soll mehr mals ein Zeichen durch ein anderes erstzt werden! Ja es handelt sich immer um das gleiche, aber wenn dieses Zeichenpaar mehrmals vor kommt, sollen alle abgeändert werden.

Ich dachte, dass man vielleicht die Text-Datei untersuchen kann, wie viele Zeichen vorhanden sind. Dann könnte man immer ein Zeichen nach dem anderen rauslesen, überprüfen und in die neue Datei schreiben. Und diesen Vorgang wiederholen, bis alle Zeichen durch sind...

Weiss nicht ob das möglich ist und mit welchen Befehlen (da ich erst neu bin).
SarekHL
SarekHL 29.05.2008 um 18:51:02 Uhr
Goto Top
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.
Biber
Biber 29.05.2008 um 18:55:39 Uhr
Goto Top
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
DexXxtrin
DexXxtrin 29.05.2008 um 19:18:57 Uhr
Goto Top
Funktioniert SED auch mit dem normalen Windows-Editor und dann als BATCH? Oder braucht man da seperate Programme?
SarekHL
SarekHL 29.05.2008 um 19:29:34 Uhr
Goto Top
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 ...
bastla
bastla 29.05.2008 um 20:02:02 Uhr
Goto Top
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:
@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%"  
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":
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 ... face-wink 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]
DexXxtrin
DexXxtrin 29.05.2008 um 20:58:53 Uhr
Goto Top
Ich habe mich sehr wohl mit SED auseinander gesetzt! Habe auf verschiedenen Seiten nachgeschaut, aber es war NIERGENDS beschrieben, wie man SED programmiert! Deshalb meine Frage! Somit vielen Dank and bastla!

Was ich nicht kapiere bei dem ganzen: Wie programmiert man dieses SED???
Ich bin zum Beispiel auch auf diese Seite gestossen: http://www.ostc.de/sed.pdf
Da wird alles Wunderbar erklärt. Abar wie man das Programmiert erklärt niemand.

Ich kenne zwar die Befehle, mit welchem ich was machen kann. Aber wie ich ein Programm schreibe habe ich null Ahnung.
Tut mir leid, abar langsam bin ich am verzeifeln.
Aus der Englischen Seite werde ich nicht ganz schlau und aus dem Rest den ich finde auch nicht!

Ich möchte wissen, ob man diesen Code auch im Editor schreiben muss, als was abspeichern (*.sed?). Kann man das mit Batch im gleichen Script schreiben, was mit sed.exe machen?
bastla
bastla 29.05.2008 um 21:11:40 Uhr
Goto Top
Hallo DexXxtrin!

In Deinem Fall wäre das etwa so:
type "D:\Dein Text.txt"|sed s/X/Y/g>"D:\Dein neuer Text.txt"  
Ablauf:
  • 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
DexXxtrin
DexXxtrin 29.05.2008 um 21:39:02 Uhr
Goto Top
Ich habe jetzt mal zum Versuchen eine Batchdatei geschrieben, die sieht volgendermassen aus:

@echo off
set /P path=Pfad von sed.exe
type "D:\Text.txt"|sed y/x/y/g>"D:\Text1.txt"

der Befehl set ist, damit die sed.exe im Pfad %path% (wie bastla sagt) auffindbar ist.
Nun ist die Ausgabe Datei Text1.txt lehr....
bastla
bastla 29.05.2008 um 21:47:22 Uhr
Goto Top
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:
type "D:\Text.txt"|"Pfad von sed.exe\sed" s/x/y/g>"D:\Text1.txt"  
Übrigens sind manchmal auch leere Dateien lehrreich ... face-wink

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
DexXxtrin
DexXxtrin 29.05.2008 um 21:55:45 Uhr
Goto Top
Ups da hab ich wohl was falsch verstanden...
Aber vielen Dank für deine Hilfe!!! Jetzt hat es funktioniert!!
Da nicht bestimmt ist wo sed.exe ist, habe ich es so gemacht:

@echo off
set /P sed=
type "D:\Text.txt"|"%sed%" y/x/y/g>"D:\Text1.txt"

Das ganze funktioniert perfekt!=)

Vielen Dank an alle für eure bemühungen!!!
Biber
Biber 29.05.2008 um 21:58:35 Uhr
Goto Top
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?
DexXxtrin
DexXxtrin 29.05.2008 um 22:05:26 Uhr
Goto Top
Moin,

Ich habe ja in eine neue Datei geschrieben...!? Von Text->Text1

@bastla
Ich habe das s nach sed und vor /x/y durch y ersetz, da ich mit s nur einen Ausdruck verändern kann, mit y kann ich mehrere Buchstaben verändern.
Wenn ich s/xy/vw/g schreibe, ersetzt es mir alle xy durch vw, aber wenn ich dies so schreibe
y/xy/vw/ ersetzt es alle x durch v und alle y durch w.
Hoffe habe die Befehle richtig verstanden!

Gruss DexXxtrin
bastla
bastla 29.05.2008 um 22:05:32 Uhr
Goto Top
Da nicht bestimmt ist wo sed.exe ist ...
Den Pfad eingeben zu müssen ist nicht wirklich elegant - lege die "sed.exe" doch einfach in das selbe Verzeichnis wie die Batchdatei, und schreibe dann:
type "D:\Text.txt"|"%~dp0sed" y/x/y/>"D:\Text1.txt"  
Grüße
bastla
bastla
bastla 29.05.2008 um 22:13:13 Uhr
Goto Top
ich habe das s nach sed und vor /x/y durch y ersetz, da ich mit s nur einen Ausdruck verändern kann, mit y kann ich mehrere Buchstaben verändern.
Ja, sorry, war mir zu spät auf-/eingefallen ...

Grüße
bastla