Lalad123
Lalad123

Reputation: 11

customize a CSV-file in PowerShell and export it

We are supposed to edit a CSV-file in PowerShell and export the file afterwards

The CSV-file contains:

"ID";"date";"number"
"YYY-12345";"24.01.2023";"123456910"

Now we should add "-001" after the ID-block..but for the whole column

thats the code for now:

$folder_csv = 'C:\Abschluss'
$folder_fileout = 'C:\Abschluss\Ausgabe'

$files = Get-ChildItem $folder_csv -File -Filter *.csv 
foreach ($file in $files) {
    $data = Import-csv $($file.Fullname) -Delimiter ";" 
    foreach($dataset in $data) {
        $data.ID + "-001"
        $data | export-csv "$folder_fileout\test.txt" -Delimiter ";" -NoType -Encoding UTF8 -append
    }
}

it shows the results in the console of PowerShell but not in the created .txt-file.

Upvotes: 1

Views: 141

Answers (1)

Santiago Squarzon
Santiago Squarzon

Reputation: 59798

You're pretty close with your code, the main issue is that you're currently doing $data.ID + "-001" and $data is actually the complete array of objects, you want to refer to $dataset instead (the object being enumerated). Aside from that, it seems you're looking to merge all Csvs into one, hence you could leverage the PowerShell pipeline using an outer ForEach-Object loop instead of foreach:

$folder_csv = 'C:\Abschluss'
$folder_fileout = 'C:\Abschluss\Ausgabe'

Get-ChildItem $folder_csv -File -Filter *.csv | ForEach-Object {
    foreach($line in $_ | Import-csv -Delimiter ';') {
        # update the Id property of this object
        $line.Id = $line.Id + '-001'
        # output the updated object
        $line
    }
} | Export-Csv "$folder_fileout\test.txt" -Delimiter ";" -NoTypeInformation -Encoding UTF8

Upvotes: 1

Related Questions