Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS - Suchen und Ersetzen

Frage Entwicklung Basic

Mitglied: pmaterina

pmaterina (Level 1) - Jetzt verbinden

02.05.2012, aktualisiert 16:39 Uhr, 4467 Aufrufe, 14 Kommentare

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
Mitglied: bastla
02.05.2012 um 17:06 Uhr
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
Bitte warten ..
Mitglied: pmaterina
02.05.2012 um 17:21 Uhr
Hallo bastla,

Die Datei "TXT-fehler" scheint mir relativ witzlos, da sie sich ja nur durch den fehlenden "inhalt7" von der
Dtei "TXT-korrektur" unterscheidet ...

ich dachte mir, dass ich in die "TXT-fehler" die zu suchenden Ausdrücke zeilenweise packe...
und in die "TXT-korrektur" die Ausdrücke die schließlichdie zu suchenden Werte ersetzen

Soll eigentlich die Ersetzung in allen Dateien gleich (unter der Verwendung nur einer einzigen "TXT-korrektur"-Datei)
erfolgen?

???
Es soll in den einzelnen txt-Dateien in den Unterordnern ersetzt werden, in denen der "Inhalt7" fehlt, fals das gemeint war...

MfG
pm
Bitte warten ..
Mitglied: bastla
02.05.2012 um 17:28 Uhr
Hallo pmaterina!

Gemeint war, ob es nur eine einzige "Ersetzungs-Tabelle" gibt, die für alle Dateien gelten soll, oder ob es für jeden Ordner eine eigene Liste gibt ...

Grüße
bastla
Bitte warten ..
Mitglied: pmaterina
02.05.2012 um 17:32 Uhr
Hallo bastla,

es ist eine datei, die für alle Dateien gelten soll...

Zur Info:
Die Werte "Inhalt6" und "Inhalt7"(fals in txt vorhanden) können in den einzelnen txt Dateien mehrmals auftauchen...
es handelt hierbei um Adressen.

deshalb habe ich das ganze in eine datei zusammengefasst,
damit ich nicht dieselben Werte doppelt verarbeiten muss.
MfG
pm
Bitte warten ..
Mitglied: bastla
02.05.2012 um 17:49 Uhr
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:
01.
Datei = "D:\1.txt" 
02.
Korr = "D:\TXT-korrektur.txt" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
 
06.
'Ersetzungsdaten in Array einlesen 
07.
Nach = Split(fso.OpenTextFile(Korr).ReadAll, vbCrLf) 
08.
MaxIndex = UBound(Nach) 
09.
ReDim Von(MaxIndex) 
10.
For i = 0 To MaxIndex 
11.
    Von(i) = "," & Split(Nach(i), ",")(1) & ",," 
12.
Next 
13.
 
14.
'in gesamter Zieldatei alle Ersetzungen versuchen 
15.
T = fso.OpenTextFile(Datei).ReadAll 
16.
For i = 0 To MaxIndex 
17.
    T = Replace(T, Von(i), Nach(i)) 
18.
Next 
19.
fso.CreateTextFile(Datei).Write T
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
Bitte warten ..
Mitglied: pmaterina
02.05.2012 um 18:05 Uhr
Hallo bastla,

vielen Dank schon mal für die Mühe!
Funktioniert wunderbar!!!

Hätte nicht gedacht, dass das mit "ein par" Zeilen zu lösen ist...



In Bezug auf die Ordnerstruktur:

es ist tatsächlich so, dass ich für dieses Projekt einen Überordner habe, (leider DARF ich nix veröffentlichen, noch nicht einmal den Kundennamen):
Überordner: Kundenname
Unterordner: Ordner_1_von_3
Ordner_2_von_3
Ordner_3_von_3
1_von_4
2_von_4
...usw

in den Unterordnern befinden sich unterschiedlich viele PDF-Dateien und jeweils genau 1 TXT-Datei

Danke nochmal, hast mir immens viel Arbeit erspart!!!

MfG
pm
Bitte warten ..
Mitglied: bastla
02.05.2012 um 18:10 Uhr
Hallo pmaterina!

Freut mich, wenn Dir das schon geholfen hat ...

Grüße
bastla
Bitte warten ..
Mitglied: pmaterina
02.05.2012 um 18:13 Uhr
Hallo bastla,

wäre noch´n riesen Schritt,
falls das mit der Ordnerstruktur klappen sollte, dass ich z.B. nur den Überordner angeben muss...



Wenn wir schon dabei sind...:
kennst du zufällig ein gutes tut für vbs?

MfG
pm
Bitte warten ..
Mitglied: bastla
02.05.2012 um 18:20 Uhr
Hallo pmaterina!
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
Bitte warten ..
Mitglied: pmaterina
02.05.2012 um 18:21 Uhr
Hallo bastla,

kann ich beides mit JA beantworten!

MfG
pm
Bitte warten ..
Mitglied: bastla
02.05.2012 um 18:35 Uhr
Hallo pmaterina!

Dann etwa so:
01.
Ordner = "D:\Kunde1" 
02.
Korr = "D:\TXT-korrektur.txt" 
03.
Typ = "txt" 'in Kleinbuchstaben 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
'gesamte Ersetzungsdatei einlesen, anhand der Zeilenschaltungen aufteilen und 
07.
'die einzelnen Zeilen im Array "Nach" speichern 
08.
Nach = Split(fso.OpenTextFile(Korr).ReadAll, vbCrLf) 
09.
MaxIndex = UBound(Nach) 'Anzahl der eingelesenen Zeilen ermitteln 
10.
ReDim Von(MaxIndex) 'Array für die Suchbegriffe ("inhalt6") in passender Größe erstellen 
11.
For i = 0 To MaxIndex 'alle Ersetzungszeilen durchgehen, ... 
12.
    '... anhand der Kommata aufteilen und alles zwischen 1. und 2. Komma 
13.
    '    (="inhalt6" dieser Zeile) als Suchbegriff in das Array-Element schreiben 
14.
    Von(i) = "," & Split(Nach(i), ",")(1) & ",," 
15.
Next 
16.
 
17.
'alle Unterordner von "Ordner" durchgehen 
18.
For Each Unterordner In fso.GetFolder(Ordner).SubFolders 
19.
    'alle Dateien des jeweiligen Unterordners durchgehen 
20.
    For Each Datei In Unterordner.Files 
21.
        'verarbeiten, wenn der Dateityp dem Inahlt der Variablen "Typ" (="txt") entspricht; 
22.
        'dabei den ermittelten Typ in Kleinbuchstaben umwandeln, damit der Vergleich 
23.
        'unabhängig von Groß-/Kleinschreibung funktioniert 
24.
        If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then 
25.
            'gesamten Dateiinhalt in die Variable "T" einlesen 
26.
            T = Datei.OpenAsTextStream.ReadAll 
27.
            'alle Ersetzungszeilen durchgehen, ... 
28.
            For i = 0 To MaxIndex 
29.
                '... die Ersetzung vornehmen und das Ergebnis wieder in "T" schreiben 
30.
                T = Replace(T, Von(i), Nach(i)) 
31.
            Next 
32.
            'Inhalt von "T" in eine neue Datei (mit altem Namen) schreiben 
33.
            fso.CreateTextFile(Datei.Path).Write T 
34.
        End If 
35.
    Next 
36.
Next
Bitte Vorsicht beim Testen - alle Textdateien aller Unterordner des in Zeile 1 angegebenen Ordners werden bearbeitet (und ohne Sicherungskopie überschrieben)!

Grüße
bastla
Bitte warten ..
Mitglied: pmaterina
03.05.2012 um 09:21 Uhr
Hallo bastla,

vielen Dank für die Mühe!

Könntest du mir vielleicht noch erklären, was da in den einzelenen Schritten passiert?

MfG
pm
Bitte warten ..
Mitglied: bastla
03.05.2012 um 09:39 Uhr
Hallo pmaterina!

Falls die (inzwischen) eingefügten Kommentarzeilen nicht genügen, einfach nochmal nachfragen ...

Grüße
bastla
Bitte warten ..
Mitglied: pmaterina
03.05.2012 um 16:44 Uhr
Hallo bastla,

vielen Dank für die ausführlichen Erklärungen!

Werde demnächst noch schlimmere Sachen machen müssen
und habe hier ja die richtigen Ansprechpartner


MfG
pm
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst VBS Suchen und Ersetzen bei UTF8 XML Dateien funktioniert nicht (7)

Frage von Nexxudus zum Thema VB for Applications ...

Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Netzwerke
LAN2LAN Verbindung sehr langsam flaschenhals gesucht (27)

Frage von PixL86 zum Thema Netzwerke ...

LAN, WAN, Wireless
Rogue Access Point (20)

Frage von Axel90 zum Thema LAN, WAN, Wireless ...

Webbrowser
Windows 7 unbeliebte Internetseite sperren (13)

Frage von Daoudi1973 zum Thema Webbrowser ...

E-Mail
Fake E-Mail in Outlook für Demonstartionszwecke (12)

Frage von sascha382 zum Thema E-Mail ...