blueeyephoenix
Goto Top

Foreach einzeln bearbeiten

Hallo Community,

ich weiß wenn ich diese Frage hier stelle fassen sich bestimmt einige an den Kopf, nur stehe ich gerade gewaltig auf dem Schlauch.

Zu meinem Problem:
Ich habe einen Ordner da werden unterschiedliche CSV Daten gespeichert.
Nun möchte ich jede Datei einzeln über ein Powershell bearbeiten und neu abspeichern. Dafür habe ich an eine foreach-schleife gedacht.

Hier mal mein script:
$dateien = get-childitem C:\TestOrdner\Daten\*.csv
foreach ($datei in $dateien) 
{$datei}
Function Transpose-Data{
    param(
        [String[]]$Names,
        [Object[]]$Data
    )
    for($i = 0;; ++$i){
        $Props = [ordered]@{}
        for($j = 0; $j -lt $Data.Length; ++$j){
            if($i -lt $Data[$j].Length){
                $Props.Add($Names[$j], $Data[$j][$i])
            }
        }
        if(!$Props.get_Count()){
            break
        }
        [PSCustomObject]$Props
    }
}
$InDatum = @(Get-Content -path $datei | Where-Object {$_.Contains("Datum")})  
$InWert1 = @(Get-Content -path $datei | Where-Object {$_.Contains("Wert1")})  
Transpose-Data Datum, Wert1 $InDatum, $InWert1 | export-csv C:\TestOrdner\Wertliste$(Get-Date -UFormat '%d%m_%H%M%S').csv -Delimiter ';' -NoTypeInformation -encoding UTF8 -force   

Problem ist das er mir damit nicht jede CSV einzeln abspeichert sondern alle Daten in eine einzelne CSV schreibt. Kann mir jemand einen Anstoß geben wo genau ich meinen Fehler mache?

Vielen Dank

Content-ID: 2198685884

Url: https://administrator.de/contentid/2198685884

Ausgedruckt am: 20.11.2024 um 02:11 Uhr

em-pie
Lösung em-pie 17.03.2022 um 10:58:36 Uhr
Goto Top
Moin,

kein Wunder.
  • Deine foreach-Schleife besteht nur aus dem Teil, dass du einmal den Namen der Datei ausgibst (Zeile 3).
  • Deine Zeilen 22, 23 und 24 liegen nicht im Foreach-Block.
  • dein Object $Data, welches du an deine Funktion übergeben möchtest, wird nicht übergeben
  • deine Variable $Names, aus der Funktion wird beim Aufruf nicht gefüllt.
  • mache in Zeile 22 + 23 mal ein Import-CSV anstelle deines Get-Content
  • Zeile 24 beinhaltet nicht je Datei einen neuen Namen; du schreibst ja alles in die Datei "Wertliste1703_105859

Gruß
em-pie
BlueEyePhoenix
BlueEyePhoenix 17.03.2022 um 11:45:54 Uhr
Goto Top
Danke für die Hilfe damit konnte ich mein Problem lösen. Die foreach-Schleife musste ich noch mit meinem Transpose-Data verknüpfen und das mit dem Namen wollte ich ja mit der Datums und Zeitangabe lösen nur brauchte ich dafür noch die Millisekunden da es sonst immer überschrieben hat.
Manchmal sieht man halt den Wald vor lauter Bäumen nicht face-big-smile
em-pie
em-pie 17.03.2022 um 12:39:26 Uhr
Goto Top
Zitat von @BlueEyePhoenix:

Danke für die Hilfe damit konnte ich mein Problem lösen. Die foreach-Schleife musste ich noch mit meinem Transpose-Data verknüpfen und das mit dem Namen wollte ich ja mit der Datums und Zeitangabe lösen nur brauchte ich dafür noch die Millisekunden da es sonst immer überschrieben hat.
ICH würde das anders lösen face-wink


baue mal folgendes in deine foreach ein:
...
$filename = [System.IO.Path]::GetFileNameWithoutExtension($datei)
...
... | export-csv C:\TestOrdner\Wertliste_$filename_$(Get-Date -UFormat '%d%m_%H%M%S').csv -Delimiter ';' -NoTypeInformation -encoding UTF8 -force  

Dann hast du den konkreten Dateinamen mit in deiner Ausgabedatei

Manchmal sieht man halt den Wald vor lauter Bäumen nicht face-big-smile
So ist es.