none
Dateiinhalt filtern und ausgeben RRS feed

  • Frage

  • Hallo alle miteinander,

    ich möchte ein Programm schreiben, welches den Inhalt einer Datei einliest und von jeder Zeile die 5. Spalt in einer neuen Datei schreibt und anschließend den Inhalt anzeigt. Beim erneuten Aufruf des Programms soll ein enventueller Inhalt in der neuen Datei gelöscht werden.

    Ich habe eigentlich nicht viel Ahnung von Scripterstellung und bin mit meinem Vorhaben nicht sehr weit gekommen. Mein großes Problem ist, ich weiß nicht, wie ich dem Programm beibringe, daß es nur die 5. Spalte in die neue Datei ausgeben soll.

    Mein Befehl sieht im Moment folgendermaßen aus:



    (get-content -path \powershell\Aufgabe_5.txt)[0,1,2,3,4,5,6] | set-content -path \powershell\Aufgabe_5neu.txt

     

    So wie ich es jetzt habe, wird natürlich der gesamte Inhalt der Aufgabe_5.txt in die neue Datei geschrieben. Kann mir jemand weiterhelfen und mir sagen, wie der Befehl aussehen muss, damit nur das 5. Zeichen in die neue Datei geschrieben wird.

    Ich mache hier jetzt schon unendlich lange rum.

     

    Im voraus beseten Dank!!


    Sonntag, 22. Januar 2012 17:51

Antworten

  • Wie Olaf schon sagte ist es am besten du postes hier mal den Inhalt von der Aufgabe_5.txt!

    Die Spalten in dieser Datei müssen Irgenwie eindeutig getrennt sein (Komma , Semikolon , Tab oder....).

    Ich habe das mal hier mit einem Komma gemacht.

    Meine Aufgabe_5.txt sieht so aus:
    Hallo1,Wert1,Zeit1,Kaugummi1,Pferd1,Hose1,Rakete1
    Hallo2,Wert2,Zeit2,Kaugummi2,Pferd2,Hose2,Rakete2
    Hallo3,Wert3,Zeit3,Kaugummi3,Pferd3,Hose3,Rakete3

     

    # Mit Get-Content eine Datei Zeilenweise ausgeben (verarbeiten)
    # Das $_ Zeichen representiert die Zeile (Objekt) in der Pipline
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$_}
    
    # die Zeile anhand von einem Trennzeichen in einzelne Objekte aufbrechen
    # in der Methode Spilt benutze ich hier das Komma als Trennzeichen
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$_.split(',')}
    
    # jedes 5. Element ausgeben
    # (Programmiersprachen beginnen bei 0 an zu zählen, deshalb hier 4!!)
    # das Ergebnis von Split wird in die Variable $Array gelegt
    # und dann wird von dem Array das 5. Element ausgegeben $Array[4]
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$Array = $_.split(','); $Array[4]}
    


     


    Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-))
    • Bearbeitet Peter Kriegel Montag, 23. Januar 2012 06:39
    • Als Antwort vorgeschlagen V3xX1992 Mittwoch, 25. Januar 2012 09:20
    • Als Antwort markiert carmensita23 Samstag, 28. Januar 2012 14:25
    Montag, 23. Januar 2012 06:38

Alle Antworten

  • Hallo,

    kannst Du noch definieren, was bei Dir die 5. Spalte ist? Sind es per Semikolon oder Tabulator getrennte Werte oder haben die Spalten feste Breiten oder ...?


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Sonntag, 22. Januar 2012 17:57
  • Wie Olaf schon sagte ist es am besten du postes hier mal den Inhalt von der Aufgabe_5.txt!

    Die Spalten in dieser Datei müssen Irgenwie eindeutig getrennt sein (Komma , Semikolon , Tab oder....).

    Ich habe das mal hier mit einem Komma gemacht.

    Meine Aufgabe_5.txt sieht so aus:
    Hallo1,Wert1,Zeit1,Kaugummi1,Pferd1,Hose1,Rakete1
    Hallo2,Wert2,Zeit2,Kaugummi2,Pferd2,Hose2,Rakete2
    Hallo3,Wert3,Zeit3,Kaugummi3,Pferd3,Hose3,Rakete3

     

    # Mit Get-Content eine Datei Zeilenweise ausgeben (verarbeiten)
    # Das $_ Zeichen representiert die Zeile (Objekt) in der Pipline
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$_}
    
    # die Zeile anhand von einem Trennzeichen in einzelne Objekte aufbrechen
    # in der Methode Spilt benutze ich hier das Komma als Trennzeichen
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$_.split(',')}
    
    # jedes 5. Element ausgeben
    # (Programmiersprachen beginnen bei 0 an zu zählen, deshalb hier 4!!)
    # das Ergebnis von Split wird in die Variable $Array gelegt
    # und dann wird von dem Array das 5. Element ausgegeben $Array[4]
    Get-Content 'C:\Temp\Aufgabe_5.txt' | Foreach-Object {$Array = $_.split(','); $Array[4]}
    


     


    Please click “Mark as Answer” on the post that helps you. Thank you ;-)) Bitte markiere hilfreiche Beiträge von mir als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". Das wäre Nett :-))
    • Bearbeitet Peter Kriegel Montag, 23. Januar 2012 06:39
    • Als Antwort vorgeschlagen V3xX1992 Mittwoch, 25. Januar 2012 09:20
    • Als Antwort markiert carmensita23 Samstag, 28. Januar 2012 14:25
    Montag, 23. Januar 2012 06:38