robdox
Goto Top

PowerShell: Zweite Zeile an das Ende der vorherigen Zeile anfügen!

Guten Morgen!

Ich habe eine kleines Vorhaben bei dem ich durch mangelndes Wissen im PowerShell (Batch will ich erst gar nicht versuchen, bei dem gebastel), keine Lösung finde.

Es gibt folgende CSV Datei:

Inhalt1;Inhalt2;Inhalt3;"Text1";  
Text2;;;
Inhalt1;Inhalt2;Inhalt3;"Text1";  
Inhalt1;Inhalt2;Inhalt3;"Text1";  
Text2;;;

Dabei soll "Text2", wenn dieser in einer zweiten Zeile vorkommt, an "Text1" in der Zeile davor angehangen werden. Die Zweite Zeile beginnt immer in der ersten Spalte der CSV, die restlichen (von der Anzahl der ";" her beide gleich) bleiben leer.

Kann mir jemand dabei weiterhelfen? Tipps?

Vielen Dank vorab!

Content-ID: 2746168513

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

colinardo
Lösung colinardo 11.05.2022 aktualisiert um 12:26:40 Uhr
Goto Top
Servus.
$file = 'E:\datei.csv'  
$csv = Import-CSV $file -Delimiter ';' -Header (1..5)  
for ($i = 0; $i -lt $csv.Count; $i++){
    if ($csv[$i+1].1 -like '*Text2*'){  
        $csv[$i].4 += $csv[$i+1].1
    }
}
($csv | convertto-csv -Delimiter ";" -notype | select -skip 1) -replace '"'  | Set-Content $file  

Ergebnis laut deiner Beschreibung
Inhalt1;Inhalt2;Inhalt3;Text1Text2;
Text2;;;;
Inhalt1;Inhalt2;Inhalt3;Text1;
Inhalt1;Inhalt2;Inhalt3;Text1Text2;
Text2;;;;

Oder auch als alternative Variante mit Get-Content statt objektorientierte mittels Import-CSV ginge auch
$file = 'E:\datei.csv'  
$csv = Get-Content $file
for ($i = 0; $i -lt $csv.Count; $i++){
    if ($csv[$i+1].Split(';') -like '*Text2*'){  
        $csv[$i] = $csv[$i] -replace '([^;]*);\s*$',('$1'+ $csv[$i+1].Split(';') +';')  
    }
}
$csv | Set-Content $file
Oder auch komplett mit RegularExpressions ginge ebenfalls
$file = 'E:\datei.csv'  
[regex]::replace((Get-Content $file -raw),'(?ism)([^;]*)(;\s+)^([^;]*Text2[^;]*)','$1$3$2$3') | Set-Content $file  

Such dir aus was dir mehr liegt.

Grüße Uwe
robdox
robdox 11.05.2022 um 14:06:57 Uhr
Goto Top
Vielen Dank Uwe, ich konnte damit mein Ergebnis erzielen face-smile
colinardo
colinardo 11.05.2022 um 14:58:28 Uhr
Goto Top
👍 .