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

Routine zum suchen von von Dateien und speichern deren Namen sowie Werte als Variablen für die weitere Verwendung

Frage Entwicklung VB for Applications

Mitglied: Kame-hame-ha

Kame-hame-ha (Level 1) - Jetzt verbinden

16.04.2012 um 10:10 Uhr, 2583 Aufrufe, 9 Kommentare

Hallo allerseits,
habe mich heue extra registriert, weil ich einfach nicht schnell genug weiterkomme.  Bis jetzt konnte ich mit Hilfe der geposteten Beiträge mich sehr gut voran bewegen. Nun stehe ich vor einem Problem. Ich benötige ein VBS oder Batch Script für die folgende Aufgabe, am besten an einem Beispiel zu erläutern:
es gibt einen Verzeichnis D:\TXT. Hier liegen fünf txt-files
000111_D.txt
000113_C.txt
000234_A.txt
000456_B.txt
000832_A.txt
Der Inhalt dieser Dateien ist ein Wert, z.B. i.O oder n.i.O

In einem anderen Verzeichnis D:\XML liegen fünf xml-files:
000111_A_Part1.xml
000113_C_Part2.xml
000234_A_Product1.xml
000456_B_Product2.xml
000832_A_Part1.xml

Diese XML-Dateien beinhalten irgendwo einen Eintrag
<UserValue value="n.d." title="test_result"></UserValue>

Ich habe als Einstieg einen VBScript geschrieben, der eine festgelegte XML nach diesem Eintrag druchsucht und den Wert bei value=”n.d“ durch einen festgelegten Wert ersetzt.

01.
'Variablen initialisieren 
02.
Dim oldvalue  
03.
Dim newvalue  
04.
Dim newcontent 
05.
Dim content 
06.
 
07.
'Variablen setzen 
08.
oldvalue = "value=" & _ 
09.
		Chr(34) & "n.d." & Chr(34) & _  
10.
		" " & _ 
11.
		"title=" & _ 
12.
		Chr(34) & "test_result" & Chr(34) 
13.
 
14.
newvalue = "value=" & _ 
15.
		Chr(34) & "i.o." & Chr(34) & _  
16.
		" " & _ 
17.
		"title=" & _ 
18.
		Chr(34) & "test_result" & Chr(34) 
19.
 
20.
'Datei öffnen und auslesen 
21.
Set FSO = CreateObject("Scripting.FileSystemObject") 
22.
Set File = FSO.OpenTextFile("D:\XML\000093_A_Part1.xml", 1) 
23.
content = File.ReadAll 
24.
File.Close 
25.
 
26.
'String finden und ersetzen 
27.
newcontent= Replace(content, oldvalue , newvalue) 
28.
 
29.
 
30.
'In Datei schreiben 
31.
Set File = FSO.OpenTextFile("D:\XML\000093_A_Part1.xml", 2) 
32.
File.Write newcontent  
33.
File.Close
Das Ziel ist es aber, dass ein Script in das Verzeichnis D:\TXT geht, die erste Datei öffnet und sich den Namen der Datei und den Inhalt (also als Variablen) merkt . Dann geht er in das D:\XML Verzeichnis, sucht eine XML, die den gleichen Namen (bzw. die ersten 8 Stellen sind identisch) hat wie die entsprechende txt-datei, und schreibt den gespeicherten Wert in das value=““ .
Das Script wird solange ausgeführt, bis er alle txt-dateien abgearbeitet hat.
Vielleicht hat einer von euch eine Idee, bin für jede Lösung dankbar.
Mitglied: Kame-hame-ha
17.04.2012 um 14:09 Uhr
Hmm, schade, dass sich niemand gemeldet hat...
Bitte warten ..
Mitglied: Biber
17.04.2012 um 14:14 Uhr
Zitat von Kame-hame-ha:
Hmm, schade, dass sich niemand gemeldet hat...
Hmmm, warte doch noch einen Moment - heute war doch wieder bis 13:30h Streiktag bei der ver.di und es sind bestimmt noch nicht alle zurück vom Marktplatz.
Bitte warten ..
Mitglied: bastla
17.04.2012 um 16:45 Uhr
Hallo Kame-hame-ha und ein etwas verspätetes Willkommen im Forum, hallo Biber!

Vor lauter Arbeit war ich noch nicht mal zum Streiken gekommen ...
Verstehe ich das richtig, dass die XML-Dateien nach dem sich aus der Textdatei ergebenden Beginn des Namens noch einen nicht bekannte Zusatz (wie "_Part1") enthalten?

Grüße
bastla
Bitte warten ..
Mitglied: Kame-hame-ha
17.04.2012 um 16:54 Uhr
Hallo Biber und bastla,

freut mich, dass ihr euch gemeldet habt. Bei uns auf Arbeit hat nur das Internet gestreikt, das würde ich aber nicht auf ver.di schieben

Ja, das stimmt. Die XML-Datein sind exportierte Objekte aus der Datenbank, ihre Benennung kann man nicht ändern. Aber die Namen der korrespondierenden Dateien wären, wie hier im Beispiel, bei den ersten 8 Zeichen identisch.
Bitte warten ..
Mitglied: bastla
17.04.2012 um 17:28 Uhr
Hallo Kame-hame-ha!

Dann brauchst Du 2 Schleifen - die erste, um alle Textdateien durchzuackern, und die zweite, um aus allen XML-Dateien die richtige herauszusuchen - ungetestet etwa so:
01.
TXTOrdner = "D:\TXT" 
02.
XMLOrdner = "D:\XML" 
03.
Alt = "<UserValue value=""n.d."" title=""test_result""></UserValue>" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
For Each TXT In fso.GetFolder(TXTOrdner).Files 'alle Textdateien durchgehen 
08.
    TXTInhalt = TXT.OpenAsTextStream.ReadLine 'erste Zeile der Datei einlesen 
09.
    Neu = Replace(Alt, "n.d.", TXTInhalt) 'gelesenen Wert in den Ersatz-String einbauen 
10.
    TXTName = LCase(fso.GetBaseName(TXT.Name)) 'Dateinamen ohne Typ in Kleinbuchstaben erzeugen 
11.
    LName = Len(TXTName) 'Länge des Namens nur einmal, daher vor der Schleife, ermitteln 
12.
    For Each XML In fso.GetFolder(XMLDateien).Files 'alle XML-Dateien durchgehen 
13.
        If LCase(Left(XML.Name, LName)) = TXTName Then 'Wenn der Anfang des Dateinamens mit dem Namen der Textdatei übereinstimmt ... 
14.
            XMLInhalt = XML.OpenAsTextStream.ReadAll '... Dateiinhalt auslesen und ... 
15.
            fso.CreateTextFile(XML.Path).Write Replace(XMLInhalt, Alt, Neu) '... mit ersetztem Text neue Datei erzeugen 
16.
            Exit For 'Fertig - übrige XML-Dateien interessieren nicht mehr 
17.
        End If 
18.
    Next 
19.
Next
Grüße
bastla

[Edit] Zeile 13 - hoffentlich - richtig gestellt [/Edit]
Bitte warten ..
Mitglied: Kame-hame-ha
17.04.2012 um 18:00 Uhr
danke bastla!

Hab's getestet, läuft noch nicht . Aber das ist erstmal kein Problem. Jetzt habe ich einen Ansatz und kann darin basteln! Wenn ich es hinbekommen habe, dann poste ich das fertige Script hier rein, ansonsten werde mich hilferufend nochmal melden !

Schöne Grüße


Kame-hame-ha
Bitte warten ..
Mitglied: Kame-hame-ha
17.04.2012 um 18:03 Uhr
Achso, was ich noch sagen wollte, das Script siehr so einfach aus...genial!
Bitte warten ..
Mitglied: Kame-hame-ha
17.04.2012 um 18:32 Uhr
Geil! Funktioniert!

An der Zeile 13 lag's und an der Zeile 12 statt XMLDateien, muss "XMLOrdner" stehen also hier nochmal das Script:

01.
TXTOrdner = "D:\TXT" 
02.
XMLOrdner = "D:\XML" 
03.
Alt = "<UserValue value=""n.d."" title=""test_result""></UserValue>" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
For Each TXT In fso.GetFolder(TXTOrdner).Files 'alle Textdateien durchgehen 
08.
    TXTInhalt = TXT.OpenAsTextStream.ReadLine 'erste Zeile der Datei einlesen 
09.
    Neu = Replace(Alt, "n.d.", TXTInhalt) 'gelesenen Wert in den Ersatz-String einbauen 
10.
	MsgBox Neu 
11.
    TXTName = LCase(fso.GetBaseName(TXT.Name)) 'Dateinamen ohne Typ in Kleinbuchstaben erzeugen 
12.
    LName = Len(TXTName) 'Länge des Namens nur einmal, daher vor der Schleife, ermitteln 
13.
    For Each XML In fso.GetFolder(XMLOrdner).Files 'alle XML-Dateien durchgehen 
14.
        If LCase(Left(XML.Name, LName)) = TXTName Then 'Wenn der Anfang des Dateinamens mit dem Namen der Textdatei übereinstimmt ... 
15.
            XMLInhalt = XML.OpenAsTextStream.ReadAll '... Dateiinhalt auslesen und ... 
16.
            fso.CreateTextFile(XML.Path).Write Replace(XMLInhalt, Alt, Neu) '... mit ersetztem Text neue Datei erzeugen 
17.
            Exit For 'Fertig - übrige XML-Dateien interessieren nicht mehr 
18.
        End If 
19.
    Next 
20.
Next
Danke nochmal vielmals! Super gelöst!
Bitte warten ..
Mitglied: bastla
17.04.2012 um 19:13 Uhr
Hallo Kame-hame-ha!

Sorry - hab' das nur so auf die Schnelle hingeschrieben (Zeile 13 war mir dann aber wenigstens selbst noch aufgefallen) ...
Noch ein Tipp: Anstelle von
MsgBox Neu
kannst Du auch
WScript.Echo Neu
verwenden - Vorteil: Wenn Du aus einer CMD-Shell mit
cscript Script.vbs
testest, brauchst Du nicht jede Ausgbae mit OK zu bestätigen (und bei defaultmäßiger Ausführung über "wscript" wird trotzdem eine MsgBox verwendet) ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

VB for Applications
gelöst Datei mit variablem Namen einlesen und als Excel speichern (1)

Frage von Anrion zum Thema VB for Applications ...

Batch & Shell
Datei mit Variablem namen in Variablem Verzeichnis umbenennen (6)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

VB for Applications
gelöst Abfrage, ob Datei mit Variablem Wert existiert (12)

Frage von Anrion zum Thema VB for Applications ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (56)

Frage von pjrtvly zum Thema Internet ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (23)

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

Windows 7
Bluesreens unternehmensweit (22)

Frage von SYS64738 zum Thema Windows 7 ...