Zum Inhalt wechseln


Foto

Batch Textverarbeitung


  • Bitte melde dich an um zu Antworten
32 Antworten in diesem Thema

#1 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 09:27

Hallo

Ich habe da ein kleines Problem:

Ich habe eine xml-Datei mit verschieden tags und würde den Inhalt mittels Batch-Datei von bestimmten tags gerne in andere xml-Dateien schreiben.


z.B.

Inhalt der xml-Datei:

<tag>
<hallo>
</tag>

<tag>
<hallo2>
</tag>

<tag>
<hallo3>
</tag>


Ziel: 3 xml-Dateien mit den einzelnen Inhalten. (jede xml-Datei mit einem tag)

Viele Grüße ..



#2 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 09:42

Hallo und Willkommen am Board,

 

es soll wirklich per Batch sein?

 

Falls man z.B. eine Textdatei zeilenweise auswerten möchte, dann eignet sich die For-Schleife mit der Textiteration /f, also for /f. Mit der Option Tokens ist ein gezieltes Auswählen möglich, falls die zu erwartenden Tags immer in der selben Spalte stehen. Auch kann man for /f kombinieren mit find oder findstr kombinieren; man kann auch schauen, ob man mit find oder findstr ohne for /f auskommt. Das ausgewertete Produkt müsste dann wohl mit dem Umleiter >> auch zeilenweise in die Zieldatei geschrieben werden.


Bearbeitet von lefg, 23. April 2013 - 09:46.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#3 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 09:58

danke für die schnelle Antwort.... :)

 

ja es sollte per Batch sein. Die gewünschten tags stehen immer in der gleichen Spalte.

Ich habe versucht eine For Schleife mit findstr zu kombinieren aber ohne Erfolg, hier wäre ein Beispiel hilfreich.



#4 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 10:01

for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i
pause

 

Die Zeilen der Textdatei werden gelesen, der Asterix von Tokens erlaubt die Auswertung der ganze Zeile, die Zeile wird mit Echo auf dem Bildschirm ausgegeben.

 

 

 

for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i >> c:\Zieldatei.txt
pause

 

Der Umleiter >> schreibt in die Zieldatei.

 

 

 

 

danke für die schnelle Antwort.... :)

 

ja es sollte per Batch sein. Die gewünschten tags stehen immer in der gleichen Spalte.

Ich habe versucht eine For Schleife mit findstr zu kombinieren aber ohne Erfolg, hier wäre ein Beispiel hilfreich.

 

Du willst also nach einem bestimmen Begriff suchen und falls der gefunden, was dann?

 

Nach meiner Erinnerung übergibt man den zu suchenden Begriff mit der Pipeline (|) an find oder findstr. Ich habe das im Einzelnen nicht mehr present.

 

Ich muss mich jetzt erst mal einer anderen Aufgabe zuwenden.


Bearbeitet von lefg, 23. April 2013 - 10:07.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#5 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 10:07

ja genau,

 

ich will also den Text zwischen [ <tag> ..... </tag> ] in eine andere xml-Datei kopieren und das für jeden <tag> in eine neue Datei.



#6 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 13:25

Ich habe jetzt, heute wohl leider keine Zeit mehr.

 

Schau dir folgendes mal an, probiere es mal aus, ob es dir hilft!

 

for /f "tokens=1" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i|findstr "gesuchter Begriff"
pause


Zu sehen ist, die Echo-Ausgabe wird mit der Pipe an findstr übergeben, bei Auffinden des Suchbegriffs erfolgt eine Ausgabe. Schau auch die Parameter zu findstr an, findstr /?

 

Beachte bitte, ich habe hier Tokens=1 gesetzt, es wird also nur das erste Token der Zeile in die Variable %%i gebracht.



for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i|findstr "Windows"
pause

 

Tokens=*

 

findstr "Windows"

 

Mit diesem Beispiel werden Zeilen ausgegeben, die das Wort Windows enthalten.


Bearbeitet von lefg, 23. April 2013 - 11:34.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#7 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 14:00

habe es mal ausprobiert.

Er meldet hier hauptsächlich diesen Fehler in der cmd-Ausgabe

Z:\Batch>echo </TestModule>  | findstr "TestCase"
Syntaxfehler.



#8 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 14:11

Und wie ist es, wenn die beiden Dateien sich in C:\ befinden?

 

Du kannst den Text der Batch hier auch einstellen zur Ansicht.


Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#9 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 14:22

Beide Dateien befinden sich in C:

 

Inhalt der Batch-Datei:

for /f "tokens=*" %%i in (test.rxtco) do echo %%i|findstr "TestCase"
pause

 

CMD-Ausgabe:

"<" ist syntaktisch an dieser Stelle nicht verarbeitbar.

C:\>echo </TestModule>  | findstr "TestCase"
Syntaxfehler.

C:\>echo <TestModule name="LBasic_ClickButton">  | findstr "TestCase"
Syntaxfehler.


 


 


Bearbeitet von tylerdurden666, 23. April 2013 - 14:43.


#10 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 14:30

Wie wäre es, es mit einer einfacheren Test.txt zu probieren? Ich habe mir auch etwas einfaches rausgesucht. Ich habe die Batch auf dem Desktop.


Bearbeitet von lefg, 23. April 2013 - 14:31.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#11 Dukel

Dukel

    Board Veteran

  • 9.244 Beiträge

 

Geschrieben 23. April 2013 - 14:31

Ich hätte jetzt schon lang auf Powershell umgestellt. Powershell kann XML ohne das man selbst etwas parsen muss.


Stop making stupid people famous.


#12 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 14:38

Ich hätte jetzt schon lang auf Powershell umgestellt. Powershell kann XML ohne das man selbst etwas parsen muss.

 

Nun, ich habe den TO in meinem ersten Beitrag gefragt, ob es tatsächlich Batch sein soll.

 

Ob er eine Lösung in PS haben möchte und Du ihm dabei hilfst?

 

 

 

 

Inhalt der Batch-Datei:

for /f "tokens=*" %%i in (test.rxtco) do echo %%i|findstr "TestCase"
pause

 

Was ist .rxtco?


Bearbeitet von lefg, 23. April 2013 - 14:41.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#13 tylerdurden666

tylerdurden666

    Newbie

  • 15 Beiträge

 

Geschrieben 23. April 2013 - 14:51

Danke für die Antworten.

 

.rxtco wird von einem bestimmten Programm erstellt. Es kann als normale Textdatei behandelt werden.

 

Es geht auch Powershell aber davon habe ich garkeine Ahnung.

 

Habe jetzt mal eine kleine Beispiel-Datei angehängt.

 

Diese soll nun in folgendes aufgesplittet werden:

 

Ziel1.xml

<Tag name = "Tag1">
<Modul name= "Modul1">
<Data name= "Data1"></Data>
</Modul>
</Tag>


Ziel2.xml

<Tag name = "Tag2">
<Modul name= "Modul2">
<Data name= "Data2"></Data>
</Modul>
</Tag>


Ziel3.xml
<Tag name = "Tag3">
<Modul name= "Modul3">
<Data name= "Data3"></Data>
</Modul>
</Tag>

Angehängte Dateien

  • Angehängte Datei  Inhalt.xml   274bytes   1 Mal heruntergeladen

Bearbeitet von tylerdurden666, 23. April 2013 - 14:53.


#14 lefg

lefg

    Expert Member

  • 20.475 Beiträge

 

Geschrieben 23. April 2013 - 15:41

Tscha, das sieht nicht gut aus, es liegt an <>, die beiden Zeichen können nicht verarbeitet werden. Das sind natürlich Steuerzeichen. Ich muss mal schauen, ob es an for liegt oder an findstr.

 

Also, es scheint an findstr zu liegen oder in der Kombination, der Pipe. Die beiden Steuerzeichen machen aber auch nach set in eine Variable und anschliessenden echo Probleme, die Batch schließt kommentarlos.


Bearbeitet von lefg, 23. April 2013 - 16:12.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#15 Dukel

Dukel

    Board Veteran

  • 9.244 Beiträge

 

Geschrieben 23. April 2013 - 16:06

Du hast eine xml Datei und diese soll pro Tag aufgeteilt werden? Woher nimmst du den Namen der Datei? Aus dem Zähler des Tags?

 

Folgender Code sollte mit Powershell funktionieren (ungetestet).

 

# Variablen
 
$src = 'C:\Temp\xmlfile.xml'
$dst = 'D:\Daten'
 
# In Xml konvertieren, welches die Powershell versteht:
$xml = '<file>'
$xml += Get-Content $src
$xml += '</file>'
$xml = [xml]$xml
 
# Aufteilen und exportieren
$xml.file.tag | % {
    $filename = $_.Name.replace('Tag','Ziel')
    $value = $_.OuterXml
    Set-Content -Value $value -Path "$dst\$filename.xml"
}


Stop making stupid people famous.