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:
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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2746168513
Url: https://administrator.de/contentid/2746168513
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
3 Kommentare
Neuester Kommentar
Servus.
Ergebnis laut deiner Beschreibung
Oder auch als alternative Variante mit Get-Content statt objektorientierte mittels Import-CSV ginge auch
Oder auch komplett mit RegularExpressions ginge ebenfalls
Such dir aus was dir mehr liegt.
Grüße Uwe
$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
$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