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, 2576 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(4)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...