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

Eine Bestimmte Zeile bzw. ein Wort aus XML mit Bedingung auslesen

Frage Entwicklung Batch & Shell

Mitglied: sommerzeit

sommerzeit (Level 1) - Jetzt verbinden

06.04.2010 um 09:09 Uhr, 6500 Aufrufe, 11 Kommentare

Hallo zusammen,

ich möchte mithilfe von einem batch oder vbs eine bestimmte Zeile in XML (noch besser wäre das Wort in der Zeile) auslesen und in eine neue txt schreiben.

die Schwierigkeit hier ist: soll nur aulesen wenn das gesuchte Wort einen Flag hat.

Beispiel das gesuchte Wort ist "Tische"
und hat 3 zeilen darunter einen Flag "Bingo" (ist auch die Schlüssel für eine LÖSUNG)

dann soll Tisch ausgelesen werden sonst nicht.

vielen Dank für eure Hilfe.

hier ist ein Teil der Beispiel Datei:
<Product ID="PT10155" UserTypeID="Produkttyp">
<Name>balicí technika</Name>
<AttributeLink AttributeID="Tische" Mandatory="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">2000</Value>
<Value AttributeID="Bingo">Y</Value>
</MetaData>
</AttributeLink>
<AttributeLink AttributeID="hledani_balici technika">
</AttributeLink>
<Values>
Mitglied: Edi.Pfisterer
06.04.2010 um 12:59 Uhr
Hallo!
versuch mal folgenden ansatz (ungetestet )

mein_ergebnis.vbs
01.
zeilennummer = 0 
02.
ausgabe = 0 
03.
datei= "mein.xml" 
04.
Set fs = CreateObject("Scripting.FileSystemObject") 
05.
Set File = fs.OpenTextFile(datei , 1, true) 
06.
Do While not file.AtEndOfStream 
07.
        zeilennummer = zeilennummer+1 
08.
        zeile = (file.ReadLine) 
09.
        if zeilennummer = 3 then 
10.
                inhaltneu =  zeile 
11.
        end if 
12.
                if zeilennummer = 6 AND instr(1, zeile, "bingo", 1) then 
13.
                ausgabe = 1 
14.
        end if 
15.
Loop 
16.
 
17.
if ausgabe = 1 then 
18.
        Wortbeginn = instr(inhaltneu, Chr(34)) 
19.
        wortende = instr(wortbeginn+1, inhaltneu, Chr(34)) 
20.
        wort = mid(inhaltneu, wortbeginn+1, wortende-wortbeginn-1) 
21.
        datei1 = "neu.txt" 
22.
        set dateineu = fs.opentextfile(datei1, 8, true,0) 
23.
        dateineu.write wort & vbcrlf 
24.
end if
das sollte dir die gesame 3. Zeile auslesen...
Falls Du nur den Teil zwischen den " brauchst, meld dich ncohmal...

lg
Edi
Bitte warten ..
Mitglied: sommerzeit
06.04.2010 um 13:42 Uhr
Hallo Edi,

vielen Dank für deine schnelle Antwort,

diesen Script funktioniert nur wenn Bingo in Zeile 6 steht, wie oben geschrieben nur Bingo ist der Schlüssel, die Zeilen nur darf mann nicht benutzen, sonst bekommte ich nur eine zeile.

den Teil der XML, ist nur eine Kleine Ausschnitt, in der wirklichkeit hat hat diese Datei 400 000 Zeilen, und Bingo kann 100 000 mal vorkommen.

ich hoffe ich habe es richtig erklärt.

vielen Dank nochmal

gruß sommerzeit
Bitte warten ..
Mitglied: Edi.Pfisterer
06.04.2010 um 13:52 Uhr
Hallo!
ich bin mir nicht sicher, ob ich Dich richtig verstehe...

Poste mal einen längeren Abschnitt Deiner xml-Datei (zumindest so lange, dass das gesuchte Wort 3 mal und Bingo nur 2 mal vorkommt...), dann kann ich mir das Problem vielleicht besser vorstellen.


ps: falls Du dir mit Englisch leichter tust, ist das für mich kein Problem

lg
Edi
Bitte warten ..
Mitglied: sommerzeit
06.04.2010 um 14:24 Uhr
Vielen Dank nochmal für deine Hilfe,

hier ist ein größere Textabschnitt.

in diesem Fall soll die Ausgabe wie folgt sein:

<AttributeLink AttributeID="Tische="true">
<AttributeLink AttributeID="Stühle">
<AttributeLink AttributeID="Fenster="true">

Beginn der XML
<Product ID="MT10163" UserTypeID="Merkmalstyp">
<Name>klešte</Name>
<AttributeLink AttributeID="Tische="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">2040</Value>
<Value AttributeID="Bingo">Y</Value>
</MetaData>
</AttributeLink>
<AttributeLink AttributeID="Stühle">
<MetaData>
<Value AttributeID="kwesto.sortsequence">2080</Value>
<Value AttributeID="Bingo">Y</Value>
</MetaData>
</AttributeLink>
<AttributeLink AttributeID="Wagen" Mandatory="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">2060</Value>
</MetaData>
</AttributeLink>
<AttributeLink AttributeID="Fenster="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">2020</Value>
<Value AttributeID="Bingo">Y</Value>
</MetaData>
<AttributeLink AttributeID="pro vysku spony" Mandatory="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">3020</Value>
</MetaData>
</AttributeLink>
<AttributeLink AttributeID="druh ovladani" Mandatory="true">
<MetaData>
<Value AttributeID="kwesto.sortsequence">3010</Value>
</MetaData>
Bitte warten ..
Mitglied: Edi.Pfisterer
06.04.2010 um 14:43 Uhr
Hallo!
Ich gehe jetzt mit meiner Holden ein bissl spazieren, schreib Dir den entsprechenden code aber am Abend beim Fernsehen, wenn ich heimkomme ...

lg
Edi
Bitte warten ..
Mitglied: bastla
06.04.2010 um 14:44 Uhr
@Edi
Als Ansatz (komme gerade auch nicht gut dazu):
01.
Inhalt = Split(fs.OpenTextFile(datei), vbCrLf) 
02.
For i = 0 To UBound(Inhalt) 
03.
   ...
In einem Array lässt sich's leichter "nach vorne" schauen ...

... und die 400000 Zeilen werden ja wohl im Speicher Platz haben ...

Grüße
bastla
Bitte warten ..
Mitglied: Edi.Pfisterer
06.04.2010 um 15:16 Uhr
@ bastla:
danke für deine Anmerkung, habs jetzt aber doch anders gemacht...

@sommerzeit:
meine Freundin hat uns noch schnell einen Imbiss zubereitet, damit wir uns gestärkt auf den Weg machen können...
(und die Zeit hat zu folgendem - getestetem - Ergebnis gereicht):

01.
datei= "mein.xml" 
02.
Set fs = CreateObject("Scripting.FileSystemObject") 
03.
Set File = fs.OpenTextFile(datei , 1, true) 
04.
Do While not file.AtEndOfStream 
05.
        zeile = (file.ReadLine) 
06.
        if instr(zeile, "AttributeLink AttributeID") >= 1 then 
07.
                temp = zeile 
08.
        end if 
09.
        if instr(1, zeile, "bingo", 1) then 
10.
        call schreiben(temp) 
11.
        end if 
12.
Loop 
13.
 
14.
function schreiben(inhalt) 
15.
        datei1 = "neu.txt" 
16.
        set dateineu = fs.opentextfile(datei1, 8, true,0) 
17.
        dateineu.write inhalt & vbcrlf 
18.
end function
lg
Edi
Bitte warten ..
Mitglied: sommerzeit
06.04.2010 um 15:38 Uhr
Hallo Edi und Bastler,

Vielen herzlichen Dank, es hat SUPER funktioniert.
Bitte warten ..
Mitglied: bastla
06.04.2010 um 15:52 Uhr
Hallo Edi!

Lässige Lösung - ich hätte das "3 zeilen darunter" unnötig ernst genommen ...

Grüße
bastla
Bitte warten ..
Mitglied: Edi.Pfisterer
06.04.2010 um 19:57 Uhr
@ sommerzeit:
gern geschehen, freut mich, wenn ich Dir helfen konnte...

@ bastla:
Danke für die Blumen - da sie von Dir kommen, freut mich das Lob besonders...
lg
Bitte warten ..
Mitglied: bastla
06.04.2010 um 22:26 Uhr
[OT]
@Edi
Danke für die Blumen
Ich müsste lügen, wenn ich behaupten würde, dass ich derlei virtuelle Pflänzchen nicht selbst gerne entgegennehme - daher reiche ich sie auch mit Freude weiter (besonders, wenn mir eine Lösung so gut gefällt) ...
[/OT]

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

Batch & Shell
gelöst BATCH Element aus XML-File auslesen (9)

Frage von pappkamerad zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Haures zum Thema Windows Server ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...