none
add-content csv Header RRS feed

  • Frage

  • Hallo zusammen,

    ich habe gleich aufgebaute CSV Dateien die ich einlesen möchte und in eine gemeinsame Datei übernehmen möchte!

    Bei all meinen Versuchen übernimmt er aber aus jeder csv Datei auch immer wieder den Header..kann ich das irgendwie umgehen?

    $Pfad = "\\server\Reports\csv"
    $collection = Get-ChildItem -Path $Pfad -Recurse|Select-Object -Property Name -ExpandProperty Name
    ForEach ($item in $collection)
    {
        $a = Get-Content -Path "$Pfad\$item" 
        Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
    }
    
     


    Aufbau ist:

    Header

    Content

    Header

    Content

    Header

    Content

    Aufbau soll:

    Header

    Content

    Content

    Content

    Ich weiß , dass ich den Header auch vorgeben kann...ich wollte aber gerne wissen ob ich es auch anders Lösen kann.

    Ich freu mich auf eure Tipps!


    Gruß Toni

    Donnerstag, 5. März 2015 08:03

Antworten

  • Hallo,

    Du kannst den Header der Dateienen auch abschneiden, indem Du folgende Zeile vor der Add-Content Zeile einfuegst.

    $a = $a[1..($a.count)]

    Die Datei sharepoint.csv wird ja wenn ich es richtig sehe neu erzeugt, also darfst Du erst bei der zweiten Datei abschneiden, damit die erste Zeile der neuen Datei die Header zeile enthaelt.

    $Pfad = "\\server\Reports\csv"
    $collection = Get-ChildItem -Path $Pfad -Recurse|Select-Object -Property Name -ExpandProperty Name
    $Cut = $False
    ForEach ($item in $collection) {
    	If ($Cut) {
    		$a = Get-Content -Path "$Pfad\$item" 
    		$a = $a[1..($a.count)]
    		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
    	}
    	else {
    		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
    		$Cut = $True
    	}
    }

    Beste Gruesse
    brima

    Donnerstag, 5. März 2015 08:52
  • Get-Content in Select-Object -Skip 1 pipen. Damit wird die Header Zeile übersprungen.

    -Raimund

    Donnerstag, 5. März 2015 08:30
  • Hallo zusammen!Vielen Danke ertmal für die Hilfe!

    @Brima: Genauso hab ich es gemeint!Die erste csv kann die Überschrift vorgeben...da anderen brauch ich nicht!DANKE

    @"Raimund, vielen Dank auch an dich...hat mir ebenfalls geholfen"

    Leider konnte ich den Code nicht ganz so benutzen, da er einfach immer die erste Datei ausgelassen hat...

    ForEach ($item in $collection) {
    	If ($Cut)

    Meintest du da eventuell:

    ForEach ($item in $collection) {
    	If ($Cut -eq $False)

    Ich konnte es mittlerweile Dank eurer Hilfe lösen mit :

    $Pfad ="\\server\Reports\csv"
    $collection = Get-ChildItem -Path $Pfad -Recurse|Select-Object -Property Name -ExpandProperty Name
    $Cut = $False
    ForEach ($item in $collection) {
    	If ($Cut -eq $False) {
    		$a = Get-Content -Path "$Pfad\$item" 
           		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
                $Cut = $True
    	}
    	else {
    $b = Get-Content -Path "$Pfad\$item" | Select-Object -Skip 1
    		Add-Content -Value $b -Path "$Pfad\sharepoint.csv" 
    		
    	}
    }

    Ich wäre für Meinungen natürlich offen, falls Ihr es noch etwas ändern würdet...Jedenfalls haben mich eure Ideen auf den Weg gebracht...


    Gruß Toni


    • Bearbeitet tonibert Freitag, 6. März 2015 08:40
    • Als Antwort markiert tonibert Freitag, 6. März 2015 08:41
    Freitag, 6. März 2015 08:40

Alle Antworten

  • Get-Content in Select-Object -Skip 1 pipen. Damit wird die Header Zeile übersprungen.

    -Raimund

    Donnerstag, 5. März 2015 08:30
  • Hallo,

    Du kannst den Header der Dateienen auch abschneiden, indem Du folgende Zeile vor der Add-Content Zeile einfuegst.

    $a = $a[1..($a.count)]

    Die Datei sharepoint.csv wird ja wenn ich es richtig sehe neu erzeugt, also darfst Du erst bei der zweiten Datei abschneiden, damit die erste Zeile der neuen Datei die Header zeile enthaelt.

    $Pfad = "\\server\Reports\csv"
    $collection = Get-ChildItem -Path $Pfad -Recurse|Select-Object -Property Name -ExpandProperty Name
    $Cut = $False
    ForEach ($item in $collection) {
    	If ($Cut) {
    		$a = Get-Content -Path "$Pfad\$item" 
    		$a = $a[1..($a.count)]
    		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
    	}
    	else {
    		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
    		$Cut = $True
    	}
    }

    Beste Gruesse
    brima

    Donnerstag, 5. März 2015 08:52
  • Immer so deklarativ wie möglich schreiben:

    Das hier

    $a = Get-Content -Path "$Pfad\$item" | Select-Object -Skip 1

    ist sicherlich leichter zu lesen und nachzuvollziehen als

    $a = Get-Content -Path "$Pfad\$item" 
    $a = $a[1..($a.count)]
    Ich bevorzuge die Konstrukte, die die moderne Sprache mitbringt.


    -Raimund

    Donnerstag, 5. März 2015 08:56
  • Hallo Raimuind,

    danke, da hast Du recht, ich bevorzuge auch deine Loesung, habe meinen Beitrag nur wegen der ersten Zeile (header) in der neuen Datei geschrieben und bei der Gelegenheit ne alternative fuer's schneiden benutzt. :-)

    Beste Gruesse
    brima


    • Bearbeitet brima Donnerstag, 5. März 2015 09:13
    Donnerstag, 5. März 2015 09:13
  • Hallo zusammen!Vielen Danke ertmal für die Hilfe!

    @Brima: Genauso hab ich es gemeint!Die erste csv kann die Überschrift vorgeben...da anderen brauch ich nicht!DANKE

    @"Raimund, vielen Dank auch an dich...hat mir ebenfalls geholfen"

    Leider konnte ich den Code nicht ganz so benutzen, da er einfach immer die erste Datei ausgelassen hat...

    ForEach ($item in $collection) {
    	If ($Cut)

    Meintest du da eventuell:

    ForEach ($item in $collection) {
    	If ($Cut -eq $False)

    Ich konnte es mittlerweile Dank eurer Hilfe lösen mit :

    $Pfad ="\\server\Reports\csv"
    $collection = Get-ChildItem -Path $Pfad -Recurse|Select-Object -Property Name -ExpandProperty Name
    $Cut = $False
    ForEach ($item in $collection) {
    	If ($Cut -eq $False) {
    		$a = Get-Content -Path "$Pfad\$item" 
           		Add-Content -Value $a -Path "$Pfad\sharepoint.csv" 
                $Cut = $True
    	}
    	else {
    $b = Get-Content -Path "$Pfad\$item" | Select-Object -Skip 1
    		Add-Content -Value $b -Path "$Pfad\sharepoint.csv" 
    		
    	}
    }

    Ich wäre für Meinungen natürlich offen, falls Ihr es noch etwas ändern würdet...Jedenfalls haben mich eure Ideen auf den Weg gebracht...


    Gruß Toni


    • Bearbeitet tonibert Freitag, 6. März 2015 08:40
    • Als Antwort markiert tonibert Freitag, 6. März 2015 08:41
    Freitag, 6. März 2015 08:40
  • Hallo,

    das Problem der fehlenden Datei liegt eigntlich daran, dass bei meiner Loesung die Zeile > $a =Get-Content-Path"$Pfad\$item"< im ELSE Zweig fehlt.

    Beste Gruesse

    brima

    Freitag, 6. März 2015 11:55