VBS - Suchen und Ersetzen
Gude,
ich habe eine "kleine Anforderung", die ich leider nicht im Stande bin selbst zu lösen, da ich mich mit vbs leider kaum bis garnicht auskenne...
Soweit ich im Forum gelesen habe, eignet sich Batch nicht wirklich für das Suchen&Ersetzen von Ausdrücken,
die unter anderem nicht nur Groß/klein-Schreibung unterscheiden sollen, sondern auch Zahlen und Sonderzeichen .-+()/\&ßüÜäÄöÖ beinhalten.
(Lasse mich gerne eines Besseren belehren)
Zu meinem Problem:
Ich habe in Unterordnern jeweils GENAU eine .txt Datei
Ordner/Ordner1/1.txt
Ordner/Ordner2/2.txt
...usw
Die manuell erstellten Textdateien beinhalten hunderte von Zeilen, die nach folgendem Schema aufgebaut sind:
Inhalt1,Inhalt2,Inhalt3,...,Inhalt10 (also IMMER! 10 Indizes pro Datensatz mit Komma getrennt)
Beim Erstellen dieser txt-Dateien sind Fehler entstanden.
"Inhalt7" ist bei manchen Dateien leer!
Inhalt1,Inhalt2,Inhalt3,Inhalt4,Inhalt5,Inhalt6,,Inhalt8,Inhalt9,Inhalt10
Da "Inhalt7" in Abhängigkeit von "Inhalt6" steht, habe ich sämtliche "Inhalt6"-Indizes mit leerem "Inhalt7" in eine separate txt-Datei exportiert.(fiktiv TXT-fehler genannt)
,Inhalt6,,
,Inhalt6,,
,Inhalt6,,
,Inhalt6,,
.
.
.
In einer weitern txt-Datei (fiktiv TXT-korrektur genannt) habe ich eben diese "Inhalt6"-Indizes MIT den vollständigen "Inhalt7"-Indizes.
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
.
.
.
"Inhalt6" und "Inhalt7" beinhalten natürlich immer unterschiedliche Werte.
Der zeilenweise Aufbau der TXT-fehler und der TXT-korrektur ist identisch,
d.h. das der Wert aus "Inhalt6" in Zeile 204 in TXT-fehler sich ebenfalls in "Inhalt6" in Zeile 204 in TXT-korrektur wiederfindet.
Nun zu meiner Frage:
Wie kriege ich am "einfachsten" meine fehlenden "Inhalt7"-Indizes in die TXT-Dateien?
MfG
pm
ich habe eine "kleine Anforderung", die ich leider nicht im Stande bin selbst zu lösen, da ich mich mit vbs leider kaum bis garnicht auskenne...
Soweit ich im Forum gelesen habe, eignet sich Batch nicht wirklich für das Suchen&Ersetzen von Ausdrücken,
die unter anderem nicht nur Groß/klein-Schreibung unterscheiden sollen, sondern auch Zahlen und Sonderzeichen .-+()/\&ßüÜäÄöÖ beinhalten.
(Lasse mich gerne eines Besseren belehren)
Zu meinem Problem:
Ich habe in Unterordnern jeweils GENAU eine .txt Datei
Ordner/Ordner1/1.txt
Ordner/Ordner2/2.txt
...usw
Die manuell erstellten Textdateien beinhalten hunderte von Zeilen, die nach folgendem Schema aufgebaut sind:
Inhalt1,Inhalt2,Inhalt3,...,Inhalt10 (also IMMER! 10 Indizes pro Datensatz mit Komma getrennt)
Beim Erstellen dieser txt-Dateien sind Fehler entstanden.
"Inhalt7" ist bei manchen Dateien leer!
Inhalt1,Inhalt2,Inhalt3,Inhalt4,Inhalt5,Inhalt6,,Inhalt8,Inhalt9,Inhalt10
Da "Inhalt7" in Abhängigkeit von "Inhalt6" steht, habe ich sämtliche "Inhalt6"-Indizes mit leerem "Inhalt7" in eine separate txt-Datei exportiert.(fiktiv TXT-fehler genannt)
,Inhalt6,,
,Inhalt6,,
,Inhalt6,,
,Inhalt6,,
.
.
.
In einer weitern txt-Datei (fiktiv TXT-korrektur genannt) habe ich eben diese "Inhalt6"-Indizes MIT den vollständigen "Inhalt7"-Indizes.
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
,Inhalt6,Inhalt7,
.
.
.
"Inhalt6" und "Inhalt7" beinhalten natürlich immer unterschiedliche Werte.
Der zeilenweise Aufbau der TXT-fehler und der TXT-korrektur ist identisch,
d.h. das der Wert aus "Inhalt6" in Zeile 204 in TXT-fehler sich ebenfalls in "Inhalt6" in Zeile 204 in TXT-korrektur wiederfindet.
Nun zu meiner Frage:
Wie kriege ich am "einfachsten" meine fehlenden "Inhalt7"-Indizes in die TXT-Dateien?
MfG
pm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184349
Url: https://administrator.de/contentid/184349
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo pmaterina!
Die Datei "TXT-fehler" scheint mir relativ witzlos, da sie sich ja nur durch den fehlenden "inhalt7" von der Dtei "TXT-korrektur" unterscheidet ...
Soll eigentlich die Ersetzung in allen Dateien gleich (unter der Verwendung nur einer einzigen "TXT-korrektur"-Datei) erfolgen?
Grüße
bastla
Die Datei "TXT-fehler" scheint mir relativ witzlos, da sie sich ja nur durch den fehlenden "inhalt7" von der Dtei "TXT-korrektur" unterscheidet ...
Soll eigentlich die Ersetzung in allen Dateien gleich (unter der Verwendung nur einer einzigen "TXT-korrektur"-Datei) erfolgen?
Grüße
bastla
Hallo pmaterina!
Da Du die Ordnerstruktur nur sehr allgemein beschrieben hast, zum Testen einmal ein Ansatz für eine einzelne (in Zeile 1 anzugebende) Datei:
Bitte beachten: Am Ende der "TXT-korrektur.txt" darf es keine Leerzeile geben, und die Datei "1.txt" wird durch die korrigierte Version überschrieben.
Grüße
bastla
Da Du die Ordnerstruktur nur sehr allgemein beschrieben hast, zum Testen einmal ein Ansatz für eine einzelne (in Zeile 1 anzugebende) Datei:
Datei = "D:\1.txt"
Korr = "D:\TXT-korrektur.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
'Ersetzungsdaten in Array einlesen
Nach = Split(fso.OpenTextFile(Korr).ReadAll, vbCrLf)
MaxIndex = UBound(Nach)
ReDim Von(MaxIndex)
For i = 0 To MaxIndex
Von(i) = "," & Split(Nach(i), ",")(1) & ",,"
Next
'in gesamter Zieldatei alle Ersetzungen versuchen
T = fso.OpenTextFile(Datei).ReadAll
For i = 0 To MaxIndex
T = Replace(T, Von(i), Nach(i))
Next
fso.CreateTextFile(Datei).Write T
Grüße
bastla
Hallo pmaterina!
Grüße
bastla
falls das mit der Ordnerstruktur klappen sollte, dass ich z.B. nur den Überordner angeben muss...
... dann müsstest Du aber zumindest diese Struktur näher beschreiben (ohne konkrete Namensangaben) - vor allem:- Gibt es in jedem Unterordner des Überordners genau eine Textdatei (sodass also vereinfachend alle enthaltenen Textdateien verarbeitet werden können)?
- Gibt es nur eine Unterordnerebene?
Grüße
bastla
Hallo pmaterina!
Dann etwa so:
Bitte Vorsicht beim Testen - alle Textdateien aller Unterordner des in Zeile 1 angegebenen Ordners werden bearbeitet (und ohne Sicherungskopie überschrieben)!
Grüße
bastla
Dann etwa so:
Ordner = "D:\Kunde1"
Korr = "D:\TXT-korrektur.txt"
Typ = "txt" 'in Kleinbuchstaben
Set fso = CreateObject("Scripting.FileSystemObject")
'gesamte Ersetzungsdatei einlesen, anhand der Zeilenschaltungen aufteilen und
'die einzelnen Zeilen im Array "Nach" speichern
Nach = Split(fso.OpenTextFile(Korr).ReadAll, vbCrLf)
MaxIndex = UBound(Nach) 'Anzahl der eingelesenen Zeilen ermitteln
ReDim Von(MaxIndex) 'Array für die Suchbegriffe ("inhalt6") in passender Größe erstellen
For i = 0 To MaxIndex 'alle Ersetzungszeilen durchgehen, ...
'... anhand der Kommata aufteilen und alles zwischen 1. und 2. Komma
' (="inhalt6" dieser Zeile) als Suchbegriff in das Array-Element schreiben
Von(i) = "," & Split(Nach(i), ",")(1) & ",,"
Next
'alle Unterordner von "Ordner" durchgehen
For Each Unterordner In fso.GetFolder(Ordner).SubFolders
'alle Dateien des jeweiligen Unterordners durchgehen
For Each Datei In Unterordner.Files
'verarbeiten, wenn der Dateityp dem Inahlt der Variablen "Typ" (="txt") entspricht;
'dabei den ermittelten Typ in Kleinbuchstaben umwandeln, damit der Vergleich
'unabhängig von Groß-/Kleinschreibung funktioniert
If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then
'gesamten Dateiinhalt in die Variable "T" einlesen
T = Datei.OpenAsTextStream.ReadAll
'alle Ersetzungszeilen durchgehen, ...
For i = 0 To MaxIndex
'... die Ersetzung vornehmen und das Ergebnis wieder in "T" schreiben
T = Replace(T, Von(i), Nach(i))
Next
'Inhalt von "T" in eine neue Datei (mit altem Namen) schreiben
fso.CreateTextFile(Datei.Path).Write T
End If
Next
Next
Grüße
bastla