none
CSV Datei auslesen und daten in neue Datei schreiben

    Frage

  • Hi, ich habe eine csv Datei die z.b. folgendermaßen aussieht:

    name,rechner,installiertesprogramm

    peter,pc1,1

    peter,pc1,2

    peter,pc1,3

    hans,pc2,2

    hans,pc2,4

    ingo,pc3,1

    ingo,pc3,3

     

    Diese Datei enthält in wirklichkeit ca. 30k Zeilen.

    Ich möchte mit der Powershell diese csv Datei einlesen. Alle Zeilen mit peter (hier:peter,pc1,1 peter,pc1,2 peter,pc1,3) sollen in eine Datei peter.txt geschrieben werden.

    Die Datei hans.txt soll alle Zeilen mit hans enthalten ( in dem Fall hans,pc2,2 hans,pc2,4) dito mit ingo.

    Wie kann ich so was mit Powershell realisieren?

    Die datei einlesn und ausgeben lassen kann ich hiermit:


    Import-Csv c:\test\CSV-trennen\test.csv | foreach {
    $a = ($_.name)
    $b = ($_.rechner)
    $c = ($_.installierteprogramme)
    write-host "$a\$b\$c"}
    

     

    Aber wie bekomme ich es hin, daß er dieses in die einzelnen Dateien peter.txt usw. schreibt?


    Donnerstag, 25. August 2011 14:09

Antworten

  • > Alle Zeilen mit peter (hier:peter,pc1,1 peter,pc1,2 peter,pc1,3) sollen in eine Datei peter.txt geschrieben werden.

    Am einfachsten gehts so:

    Import-Csv D:\test.csv | foreach {
    $a = ($_.name)
    $b = ($_.rechner)
    $c = ($_.installiertesprogramm)
    write-host "$a\$b\$c"
    
    $filename = "d:\"+$_.name+".txt"
    $text = $_.name + " " + $_.rechner + " " + $_.installiertesprogramm
    add-content $filename $text 
    
    }
    

    Für jeden Eintrag wird ein Filename aus $.name erstellt. Dann wird die Textzeile aus den Eigenschaften erstellt und  zu dieser Datei hinzugefügt. Sollte die Datei noch nicht vorhanden sein wird sie automatisch erstellt.

    Du must die beiden Pfade noch anpassen. Ausserdem hast du in der CSV eine Eigenschaft "installiertesprogramm" genannt, im Skript aber "installierteprogramme". Das muß identisch sein.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Donnerstag, 25. August 2011 14:37

Alle Antworten

  • > Alle Zeilen mit peter (hier:peter,pc1,1 peter,pc1,2 peter,pc1,3) sollen in eine Datei peter.txt geschrieben werden.

    Am einfachsten gehts so:

    Import-Csv D:\test.csv | foreach {
    $a = ($_.name)
    $b = ($_.rechner)
    $c = ($_.installiertesprogramm)
    write-host "$a\$b\$c"
    
    $filename = "d:\"+$_.name+".txt"
    $text = $_.name + " " + $_.rechner + " " + $_.installiertesprogramm
    add-content $filename $text 
    
    }
    

    Für jeden Eintrag wird ein Filename aus $.name erstellt. Dann wird die Textzeile aus den Eigenschaften erstellt und  zu dieser Datei hinzugefügt. Sollte die Datei noch nicht vorhanden sein wird sie automatisch erstellt.

    Du must die beiden Pfade noch anpassen. Ausserdem hast du in der CSV eine Eigenschaft "installiertesprogramm" genannt, im Skript aber "installierteprogramme". Das muß identisch sein.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Donnerstag, 25. August 2011 14:37
  • Danke, klappt genauso wie ich es wollte. Erspart mir eine Menge Arbeit.
    Donnerstag, 25. August 2011 14:52