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!
Please also mark the comments that contributed to the solution of the article
Content-Key: 2746168513
Url: https://administrator.de/contentid/2746168513
Printed on: April 25, 2024 at 05:04 o'clock
3 Comments
Latest comment
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