Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: pmaterina

pmaterina (Level 1) - Jetzt verbinden

02.05.2012, aktualisiert 16:39 Uhr, 4603 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

VBS - Suchen und Ersetzen in Word 2010 in Kopfzeile

gelöst Frage von JuckieVB for Applications7 Kommentare

Hallo zusammen, ich stehe bei einem VBS ein wenig auf dem Schlauch. Ich habe ein VBS, welches in Verzeichnissen ...

VB for Applications

VBS Suchen und Ersetzen bei UTF8 XML Dateien funktioniert nicht

gelöst Frage von NexxudusVB for Applications7 Kommentare

Hallo zusammen, ich verzweifel gerade an einer - eigentlich total primitiven- Aufgabe. Dazu muss ich sagen, dass ich mich ...

Windows Tools

Suche Programm zum dateien suchen und Ersetzen mit Wildcat Suche

gelöst Frage von sfera-haizaWindows Tools5 Kommentare

Grüßt euch, ich nutze zzT. das Programm InfoRapid Suchen & Ersetzen um HTML / PHP Dateien zu durchsuchen bzw. ...

Batch & Shell

CMD: Suchen, Ersetzen und Hochzählen

gelöst Frage von ralfkauskBatch & Shell3 Kommentare

Hallo zusammen Ich habe folgendes Problem In einer Datei muss ein Wert gefunden, auf Korrektheit geprüft und evtl. ersetzt/geändert ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 5 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 8 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...