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

Mit Vbs eine Stelle einer Datei auslesen und in ein anderes File einfügen

Frage Entwicklung Batch & Shell

Mitglied: rdklieli

rdklieli (Level 1) - Jetzt verbinden

07.04.2009, aktualisiert 14:36 Uhr, 5179 Aufrufe, 10 Kommentare

Hallo zusammen

Da ich wirklich sehr schwach bin in vbs -scripting, bzw. gar nichts kann, wende ich mich nun an euch.

So das Ziel ist eigentlich, eine Zeile aus einem .xml dokument, in ein anderes zu kopieren.
hört sich vllt einfach an aber:

Ich möchte gerne das via script der dateiname angegeben werden kann (ohne .xml zu schrieben), danach wird aus dieser .xml datei die Zeile, startend mit "<Device" und endend mit "/>" (ohne " " ...) in eine Datei kopiert , bzw nach einem "/>" in der Datei mit absatz geschrieben wird.

Weiss einer von euch weiter?


wäre sehr nett

Liebe Grüsse

edit: das kopierte sollte ebenfalls in ein XML File kopiert werden, dessen name aber konstant ist.
Mitglied: bastla
07.04.2009 um 14:43 Uhr
Hallo rdklieli und willkommen im Forum!

die Zeile, startend mit "<Device" und endend mit "/>"
Es gibt genau eine Zeile, für welche diese Voraussetzungen zutreffen?

in eine Datei kopiert , bzw nach einem "/>" in der Datei mit absatz geschrieben
Könntest Du kurz mit einem "Vorher"-"Nachher"-Vergleich der letzten paar Zeilen der Zieldatei (vorzugsweise in passender Formatierung - "plain" bietet sich an) demonstrieren, wie das Ergebnis genau aussehen soll?

Grüße
bastla
Bitte warten ..
Mitglied: rdklieli
07.04.2009 um 14:58 Uhr
Hallo bastla ..

natürlich, mach ich gerne.

Wichtig ist noch zu sagen: es können auch mehrer Zeilen sein die mit "<Device" beginnen und "/>" enden.
So sieht die Datei aus:

1:
 <?xml version="1.0"?> 
<NetworkInfo version="X"> 
	<Computer Name="local" Username="User" Status="Not Protected"> 
		**<Device** text texttext" **/>** 
	</Computer> 
</NetworkInfo> 
 
 
Nun sollte aus die Zeile Kopiert werden.. Start und ende sind fett. (Mit sternen markiert )

Merke: es können auch mehrere Zeilen vorkommen und müssen auch kopiert werden.

Dies wird dann in ein gleiches Dokument eingefügt, welches gleich aussieht, einfach mehr "<Device" zeilen drinn hat:

 <?xml version="1.0"?> 
<NetworkInfo version="X"> 
	<Computer Name="local" Username="User" Status="Not Protected"> 
		<Device text texttext" /> 
                <Device text texttext" /> 
               <Device text texttext" **/>** 
	</Computer> 
</NetworkInfo> 
 
 
Fett: wichtig das hier nach dem "/>" ein absatz für die neue, einzutragende Zeile kommt.

liebe Grüsse
Bitte warten ..
Mitglied: bastla
07.04.2009 um 15:13 Uhr
Zusatzfrage: Belegt jeder "<Device"-Eintrag nur eine Zeile (also bis zum Zeilenende CR/LF)?

Grüße
bastla
Bitte warten ..
Mitglied: rdklieli
07.04.2009 um 15:15 Uhr
hallo

Ja, es wird jeweils nur eine Zeile beanspruch,. bis zum Zeilenende jedoch nicht.

Gruss
Bitte warten ..
Mitglied: bastla
07.04.2009 um 15:47 Uhr
Hallo rdklieli!

Unter der Annahme, dass die Zeilen in der Zieldatei vor der Zeile
</Computer>
eingefügt werden sollen, etwa so:
01.
Basis = "D:\XML_Files" 
02.
Beginn = "<Device" 
03.
Ende = "/>" 
04.
 
05.
Ziel = "D:\Sammel.xml" 
06.
VorZeile = "</Computer>" 
07.
 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
Datei = InputBox("Bitte den Dateinamen (ohne .xml) eingeben!", "Dateiname") 
10.
 
11.
Do While Right(Basis, 1) = "\" And Len(Basis) > 1 
12.
    Basis = Left(Basis, Len(Basis) - 1) 
13.
Loop 
14.
Pfad = Basis & "\" & Datei & ".xml" 
15.
 
16.
If Not fso.FileExists(Pfad) Then 
17.
    WScript.Echo "Die Datei " & Pfad & " konnte nicht gefunden werden!" 
18.
    WScript.Quit 1 
19.
End If 
20.
 
21.
LBeginn = Len(Beginn) 
22.
Ausgabe = "" 
23.
Zeilen = Split(fso.OpenTextFile(Pfad).ReadAll, vbCrLF) 
24.
For Each Zeile In Zeilen 
25.
    Von = InStr(Zeile, Beginn) 
26.
    Bis = InStr(Zeile, Ende) 
27.
    If Von * Bis > 0 And Bis - Von > LBeginn Then 
28.
        Ausgabe = Ausgabe & vbTab & vbTab & Mid(Zeile, Von, Bis - Von + 2) & vbCrLF 
29.
    End If 
30.
Next 
31.
 
32.
T = Split(fso.OpenTextFile(Ziel).ReadAll, vbCrLF) 
33.
 
34.
For i = 0 To UBound(T) 
35.
    If InStr(T(i), VorZeile) > 0 Then 
36.
        If i > 0 Then 
37.
            Set Z = fso.CreateTextFile(Ziel) 
38.
            For j = 0 To i - 1 
39.
                Z.WriteLine T(j) 
40.
            Next 
41.
            Z.Write Ausgabe 
42.
            For j = i To UBound(T) 
43.
                Z.WriteLine T(j) 
44.
            Next 
45.
            Z.Close 
46.
            Exit For 
47.
        End If 
48.
    End If 
49.
Next
Wie die Angabe der Quelldatei erfolgen soll, konnte ich aus Deiner Beschreibung nicht ganz genau herauslesen - daher in dieser Version als Kombination von vorgegebenem Basis-Pfad und Eingabe nur des Dateinamens ...

Die Zieldatei wird (ohne Erstellung einer Sicherungskopie) um die gefundenen Zeilen ergänzt (wobei vor jeder dieser Zeilen 2 TAB eingefügt sind - siehe Zeile 28).

Grüße
bastla
Bitte warten ..
Mitglied: rdklieli
07.04.2009 um 16:17 Uhr
Hallo

Erstmal herzlichen dank für die Mühe!
Jedoch funktionierts nicht.. das Einlesen und die Dateiangabe (Pfade wurden angepasst!) funktioniert soweit, jedoch ändert sich nichts an der "ziel" datei.
Berechtigung hab ich genug, mach dis als domänenadministrator... Leider kann ich nicht weiter hilfreich sein da ich keine ahnung davon habe.

Gruss
Bitte warten ..
Mitglied: bastla
07.04.2009 um 17:15 Uhr
Hallo rdklieli!

Vorweg: Mit Deinen beiden Testdateien klappt das bei mir ...
Es könnte an der Zeile 6 liegen - wenn in der Zieldatei die Schreibweise (auch Groß-/Kleinschreibung) nicht exakt übereinstimmt, wird aus Sicherheitsgründen auch nichts verändert.

Das Auslesen kannst Du durch Einfügen von
WScript.Echo Ausgabe
als Zeile 31 prüfen - es sollten alle gefundenen Zeilen (durch die 2 TAB eingerückt) ausgegeben werden.

Grüße
bastla
Bitte warten ..
Mitglied: rdklieli
07.04.2009 um 17:22 Uhr
Hallo bastla!

Mit dem einfügen von WScript.Echo Ausgabe kommt immer ein leeres WSH Fenster.
Auch habe ich Gross/Kleinschreibung, 2 Tab eingerückt angeschaut und keine Fehler gefunden..

Gruss
Bitte warten ..
Mitglied: bastla
07.04.2009 um 18:51 Uhr
Hallo rdklieli!

Könnten Deine Dateien im Unicode-Format vorliegen?

Falls dem so wäre, müsstest Du die Zeilen 23, 32 und 37 wie folgt abändern:
Zeilen = Split(fso.OpenTextFile(Pfad,1,True,True).ReadAll, vbCrLF) 
 
T = Split(fso.OpenTextFile(Ziel,1,True,True).ReadAll, vbCrLF) 
 
Set Z = fso.CreateTextFile(Ziel,True,True)
Ansonsten könntest Du noch
WScript.Echo Von,Bis,Zeile
zwischen den Zeilen 26 und 27 einfügen und das Script von der Kommandozeile ("Start / Ausführen / CMD") durch die Eingabe
cscript //nologo "D:\DasScript.vbs"
starten. Das Ergebnis sieht bei Deinen geposteten Testdaten (die Sterne habe ich entfernt, obwohl es damit auch ginge) so aus:
0 0 <?xml version="1.0"?> 
0 0 <NetworkInfo version="X"> 
0 0     <Computer Name="local" Username="User" Status="Not Protected"> 
3 26            <Device text texttext" /> 
0 0     </Computer> 
0 0 </NetworkInfo>
An der Zeile
3 26            <Device text texttext" />
ist zu erkennen, dass der erste Suchbegriff an Position 3 (davor sind nur 2 TAB) beginnt und der zweite Suchbegriff ("/>") an Position 26 zu finden ist. Nur wenn beide in einer Zeile enthalten sind (und "/>" hinter "<Device" liegt), wird diese Zeile verarbeitet.

Grüße
bastla
Bitte warten ..
Mitglied: rdklieli
08.04.2009 um 08:20 Uhr
Hallo Bastla!

Es lag wohl wirklich am Unicode Format! es funktioniert nun bestens! Dankeschön!!

Liebe Grüsse
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (22)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...