Bearbeitung einer CSV Datei an bestimmter Spalte
Hallo an alle,
ich bin gerade diesem Forum beigetreten, und wünsche allen erst einmal ein herzliches "Hallo" ...
nun zu meiner Frage:
ich habe als Ausgang eine CSV-Datei (Auszug siehe folgend) mit folgenden Inhalten (plus "X" weitere Zeilen):
nun besteht die Besonderheit darin (das ";" ist der delimiter), das in der 4. Spalte (Telefonnummer), eine Vorwahl und eine Rufnummer + der vorhandenen Durchwahl eingefügt werden soll (z.B. +49-40-1234-Durchwahl), aber,
hierbei ist die Besonderheit, dass auch schon komplette Telefonnummern existieren, die übergangen werden sollen.
Also nur die Zeilen "bearbeitet" werden, die nur 4 Stellen (Durchwahl) der Telefonnummer beinhalten.
Jetzt habe ich mich schon an Batch und VBS versucht, komme aber partout zu keinem brauchbaren Ergebnis (bin noch ein Neuling in der Batch und/oder VBS Programmierung.
daher würde ich mir wünschen, wenn die Lösung eine Batch-, PowerShell- oder vbs-Datei wäre
Vielen Dank schon mal im voraus für Eure Unterstützung
IT-Wurzel
ich bin gerade diesem Forum beigetreten, und wünsche allen erst einmal ein herzliches "Hallo" ...
nun zu meiner Frage:
ich habe als Ausgang eine CSV-Datei (Auszug siehe folgend) mit folgenden Inhalten (plus "X" weitere Zeilen):
'User-Nachname1';'User-Vorname1';'(OR)';'4444';'Abt. 1';''
'User-Nachname2';'User-Vorname2';'';'+111-2-3333333';Abt. 2;''
'User-Nachname3';'User-Vorname3';'';'+111-2-3333333';Abt. 2;''
'User-Nachname4';'User-Vorname4';'';'4444';'Abt. 1';''
nun besteht die Besonderheit darin (das ";" ist der delimiter), das in der 4. Spalte (Telefonnummer), eine Vorwahl und eine Rufnummer + der vorhandenen Durchwahl eingefügt werden soll (z.B. +49-40-1234-Durchwahl), aber,
hierbei ist die Besonderheit, dass auch schon komplette Telefonnummern existieren, die übergangen werden sollen.
Also nur die Zeilen "bearbeitet" werden, die nur 4 Stellen (Durchwahl) der Telefonnummer beinhalten.
Jetzt habe ich mich schon an Batch und VBS versucht, komme aber partout zu keinem brauchbaren Ergebnis (bin noch ein Neuling in der Batch und/oder VBS Programmierung.
daher würde ich mir wünschen, wenn die Lösung eine Batch-, PowerShell- oder vbs-Datei wäre
Vielen Dank schon mal im voraus für Eure Unterstützung
IT-Wurzel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246360
Url: https://administrator.de/contentid/246360
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
13 Kommentare
Neuester Kommentar
na dann z.B. mit Powershell so:
oder ebenfalls mit Powershell in der Regular Expressions-Variante:
$fileIN = "C:\file_in.csv"
$fileOUT = "C:\file_out.csv"
$preNumber = '+49-40-1234-'
$content = (gc $fileIN | out-string).Replace("'","""")
$objCSV = ConvertFrom-Csv $content -Delimiter ";" -Header "1","2","3","4","5","6"
$objCSV | ?{$_.'4' -match "^\d{4}$"} | %{$_.'4' = "$preNumber$($_.'4')"}
($objCSV | ConvertTo-Csv -Delimiter ";" -NoTypeInformation | select -skip 1 | out-string).Replace("""","'") | set-content $fileOUT
oder ebenfalls mit Powershell in der Regular Expressions-Variante:
$fileIN = "C:\file_in.csv"
$fileOUT = "C:\file_out.csv"
$preNumber = '+49-40-1234-'
$content -replace "^([^;]*;[^;]*;[^;]*;')(\d{4})('.*)$",('$1'+$preNumber+'$2$3') | set-content $fileOUT
nur Zeile 7 ist hinzugekommen
Regular Expressions Tutorial
und wenn du jetzt mit noch mehr Varianten kommst, solltest du mal folgenden Thread lesen, hatten wir vor ein paar Tagen schonmal das ganze Theater:
Grüße Uwe
$fileIN = "C:\file_in.csv"
$fileOUT = "C:\file_out.csv"
$preNumber = '+49-40-1234-'
$content = (gc $fileIN | out-string).Replace("'","""")
$objCSV = ConvertFrom-Csv $content -Delimiter ";" -Header "1","2","3","4","5","6"
$objCSV | ?{$_.'4' -match "^\d{4}$"} | %{$_.'4' = "$preNumber$($_.'4')"}
$objCSV | ?{$_.'4' -match '^00.{3,}'} | %{$_.'4' = $_.'4' -replace '^00','+49-'}
($objCSV | ConvertTo-Csv -Delimiter ";" -NoTypeInformation | select -skip 1 | out-string).Replace("""","'") | set-content $fileOUT
und wenn du jetzt mit noch mehr Varianten kommst, solltest du mal folgenden Thread lesen, hatten wir vor ein paar Tagen schonmal das ganze Theater:
Grüße Uwe