
64142
15.04.2008, aktualisiert am 18.04.2008
Massendaten Text editor
besser einen dos befehl verwenden, denke ich mir ..
Hallo zusammen,
habe das forum durchsucht, aber noch keinen passenden Hinweis zur Lösung meines Problemes gefunden.
mir liegen ca 15000 xml files vor in denen ein bestimmter string geändert werden sollte.
kann jetzt mit einigen Texteditoren mal 500 dateien öffen, string suchen und ersetzen und wieder abspeichern, für alle Dateien dauert aber auch das eine kleine Ewigkeit.
Da müsste es soch ein Tool oder einen cmd befehl dafür geben, der das schneller löst?
zumal es für mich wohl keine einmalige Aktion bleibt, sondern das öfter vorkommen wird.
Die xml dateien sind ca 40 kB groß und mit jedem beliebigen Editor bisher zu lesen gewesen,
es liegen alle in einem Ordner,
Betriebssystem ist Windows XP - tja, das Unix dort mehr kann, ist mir auch bekannt, aber das hilft mir hier leider auch nicht weiter
Danke für jeden Beitrag zur Lösung.
Gruß
halfprice
Hallo zusammen,
habe das forum durchsucht, aber noch keinen passenden Hinweis zur Lösung meines Problemes gefunden.
mir liegen ca 15000 xml files vor in denen ein bestimmter string geändert werden sollte.
kann jetzt mit einigen Texteditoren mal 500 dateien öffen, string suchen und ersetzen und wieder abspeichern, für alle Dateien dauert aber auch das eine kleine Ewigkeit.
Da müsste es soch ein Tool oder einen cmd befehl dafür geben, der das schneller löst?
zumal es für mich wohl keine einmalige Aktion bleibt, sondern das öfter vorkommen wird.
Die xml dateien sind ca 40 kB groß und mit jedem beliebigen Editor bisher zu lesen gewesen,
es liegen alle in einem Ordner,
Betriebssystem ist Windows XP - tja, das Unix dort mehr kann, ist mir auch bekannt, aber das hilft mir hier leider auch nicht weiter
Danke für jeden Beitrag zur Lösung.
Gruß
halfprice
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85586
Url: https://administrator.de/forum/massendaten-text-editor-85586.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
14 Kommentare
Neuester Kommentar
Ich kann mich nur anschliesen. Poste doch mal den relevanten Teil der Datei und wie es danach aussehen soll.
Der Editor PSPad kann da glaube ich auch mehr Dateien. Dort gibt es auch die Funktion einen ganzen Ordner zu durchsuchen und in allen Dateien (oder durch Benutzung eines Filters nur bestimmten) darin Wörter zu suchen und zu ersetzen.
Der Editor PSPad kann da glaube ich auch mehr Dateien. Dort gibt es auch die Funktion einen ganzen Ordner zu durchsuchen und in allen Dateien (oder durch Benutzung eines Filters nur bestimmten) darin Wörter zu suchen und zu ersetzen.
Hallo halfprice!
Für eine automatisierte Lösung wären einige weitere Details wichtig, zB:
- Befinden sich die Dateien alle im selben Ordner, und sollen sie dort bleiben?
- Sollen die alten Dateien überschrieben werden, oder brauchst Du Sicherungskopien?
- Sind alter und neuer String jeweils konstant, und woher sollen die Werte dafür kommen?
Grüße
bastla
Für eine automatisierte Lösung wären einige weitere Details wichtig, zB:
- Befinden sich die Dateien alle im selben Ordner, und sollen sie dort bleiben?
- Sollen die alten Dateien überschrieben werden, oder brauchst Du Sicherungskopien?
- Sind alter und neuer String jeweils konstant, und woher sollen die Werte dafür kommen?
Grüße
bastla
Hallo halfprice!
Es gibt natürlich, abgesehen von den genannten Editoren, eine Menge an spezialisierten "Search & Replace"-Tools verschiedenster Art und Lizenz - wenn's mit Bordmitteln bzw als Eigenbau gehen soll, dann etwa so:
Dieses VBScript solltest Du unter Verwendung eines beliebigen Texteditors zB unter "C:\Scripts\SRF.vbs" speichern (falls Du den Windows-Editor verwendest, bitte darauf achten, beim Speichern den Dateinamen unter Anführungszeichen zu setzen, da ansonsten ".txt" angefügt wird) und von der Kommandozeile ("Start / Ausführen / CMD") so starten:
Auf diese Art siehst Du immer, welche Datei gerade bearbeitet wird. Falls Du diese optische Kontrolle nicht benötigst, entferne einfach die Zeile "WScript.Echo "Bearbeite: " & File.Name" - dann kannst Du das Script auch einfach per Doppelklick ausführen.
In dieser Version wird beim Suchen zwischen Klein- und Großschreibung unterschieden (lässt sich bei Bedarf ändern).
Achtung: Es werden (ohne Sicherung) alle Dateien des angegebenen Ordners überschrieben (auch wenn keine Ersetzung nötig war - dann eben mit dem Originalinhalt) - bitte mit Kopien testen!
Eine Variante, bei der nur veränderte Dateien neu geschrieben werden, kann ich bei Bedarf auch anbieten - die Laufzeit des Scripts würde sich dadurch verlängern, ob allerdings wesentlich, kann ich nicht abschätzen (wäre ggf zu testen).
Grüße
bastla
P.S.: Ich habe mir erlaubt, die Beispielstexte für die Ersetzung etwas zu variieren ...
Es gibt natürlich, abgesehen von den genannten Editoren, eine Menge an spezialisierten "Search & Replace"-Tools verschiedenster Art und Lizenz - wenn's mit Bordmitteln bzw als Eigenbau gehen soll, dann etwa so:
'SRF.vbs
Const Ordner = "Z:\Testdaten"
Const ToReplace = "ich hab dich nicht lieb"
Const ReplaceBy = "ich hab dich lieb"
Set fso = CreateObject("Scripting.FileSystemObject")
For Each File In fso.GetFolder(Ordner).Files
WScript.Echo "Bearbeite: " & File.Name
Text = fso.OpenTextFile(File).ReadAll
fso.CreateTextFile(File, True).Write Replace(Text, ToReplace, ReplaceBy)
Next
WScript.Echo "Fertig"
cscript //nologo "C:\Scripts\SRF.vbs"
In dieser Version wird beim Suchen zwischen Klein- und Großschreibung unterschieden (lässt sich bei Bedarf ändern).
Achtung: Es werden (ohne Sicherung) alle Dateien des angegebenen Ordners überschrieben (auch wenn keine Ersetzung nötig war - dann eben mit dem Originalinhalt) - bitte mit Kopien testen!
Eine Variante, bei der nur veränderte Dateien neu geschrieben werden, kann ich bei Bedarf auch anbieten - die Laufzeit des Scripts würde sich dadurch verlängern, ob allerdings wesentlich, kann ich nicht abschätzen (wäre ggf zu testen).
Grüße
bastla
P.S.: Ich habe mir erlaubt, die Beispielstexte für die Ersetzung etwas zu variieren ...
Hallo halfprice!
Grüße
bastla
... mit performance einbußen verbunden.
Kannst ja mal testen, ob es eine signifikante Änderung der Laufzeit gibt:'SRFL.vbs
Const Ordner = "Z:\Testdaten"
Const LogFile = "Z:\SRF-Log.txt"
Const ToReplace = "ich hab dich nicht lieb"
Const ReplaceBy = "ich hab dich lieb"
Set fso = CreateObject("Scripting.FileSystemObject")
Set LogF = fso.CreateTextFile(LogFile, True)
For Each File In fso.GetFolder(Ordner).Files
Text = fso.OpenTextFile(File).ReadAll
If InStr(Text, ToReplace) Then
fso.CreateTextFile(File, True).Write Replace(Text, ToReplace, ReplaceBy)
LogF.WriteLine File.Name
End If
Next
WScript.Echo "Fertig"
Grüße
bastla
Hallo halfprice!
Die Ersetzung erfolgt "case sensitive" - um das zu ändern, bitte die folgende Zeile durch das Hinzufügen von ", 1, -1, vbTextCompare " ändern auf:
Je nach Datenherkunft könnte das Zeilenende anstelle von vbCrLF vielleicht nur ein vbCr oder ein vbLF sein.
Schließlich solltest Du die Zeilen noch genau daraufhin untersuchen, ob etwa Leerzeichen oder ein TAB (nicht nur am Zeilenende) enthalten sind - diese müssten natürlich auch im Suchmuster ("ToReplace") entsprechend berücksichtigt werden.
Grüße
bastla
P.S.: Wenn ich die von Dir angegebenen Beispielzeilen verwende, funktioniert's auch schon mit Deinem zuletzt geposteten Script ...
P.P.S.: Bitte setze beim Posten von Scripts oder anderen Inhalten, die möglichst unverändert dargestellt werden sollen, die Tags < code> bzw < /code> (natürlich ohne Leerzeichen).
Die Ersetzung erfolgt "case sensitive" - um das zu ändern, bitte die folgende Zeile durch das Hinzufügen von ", 1, -1, vbTextCompare " ändern auf:
fso.CreateTextFile(File, True).Write Replace(Text, ToReplace, ReplaceBy, 1, -1, vbTextCompare )
Schließlich solltest Du die Zeilen noch genau daraufhin untersuchen, ob etwa Leerzeichen oder ein TAB (nicht nur am Zeilenende) enthalten sind - diese müssten natürlich auch im Suchmuster ("ToReplace") entsprechend berücksichtigt werden.
Grüße
bastla
P.S.: Wenn ich die von Dir angegebenen Beispielzeilen verwende, funktioniert's auch schon mit Deinem zuletzt geposteten Script ...
P.P.S.: Bitte setze beim Posten von Scripts oder anderen Inhalten, die möglichst unverändert dargestellt werden sollen, die Tags < code> bzw < /code> (natürlich ohne Leerzeichen).