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-Key: 2746168513

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: colinardo
Solution colinardo May 11, 2022 updated at 10:26:40 (UTC)
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
Member: robdox
robdox May 11, 2022 at 12:06:57 (UTC)
Goto Top
Vielen Dank Uwe, ich konnte damit mein Ergebnis erzielen face-smile
Member: colinardo
colinardo May 11, 2022 at 12:58:28 (UTC)
Goto Top
👍 .