Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bearbeitung einer CSV Datei an bestimmter Spalte

Frage Entwicklung

Mitglied: IT-Wurzel

IT-Wurzel (Level 1) - Jetzt verbinden

13.08.2014 um 10:58 Uhr, 874 Aufrufe, 13 Kommentare, 2 Danke

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):

01.
'User-Nachname1';'User-Vorname1';'(OR)';'4444';'Abt. 1';'' 
02.
'User-Nachname2';'User-Vorname2';'';'+111-2-3333333';Abt. 2;'' 
03.
'User-Nachname3';'User-Vorname3';'';'+111-2-3333333';Abt. 2;'' 
04.
'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
Mitglied: LordXearo
13.08.2014, aktualisiert um 11:09 Uhr
Hallo IT-Wurzel,

kannst du nicht die CSV in OpenOffice Calc / MS Excel einlesen, bearbeiten und wieder als csv abspeichern?

Gruß
Xearo
Bitte warten ..
Mitglied: colinardo
13.08.2014, aktualisiert um 11:11 Uhr
Moin IT-Wurzel,
das ist kein Problem. Ist deine CSV-Datei wirklich so formatiert, also hat keine Überschriften und werden einzelne Hochkommas für den Text anstatt doppelten verwendet ?

Grüße Uwe
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 11:18 Uhr
Hallo Xearo,

leider nein, da die csv-Datei immer wieder neu erzeugt wird, und ich gerne einen Automatismus verwenden möchte, da auch der Inhalt der csv_Datei immer wieder variieren kann. (Die csv-Datei wird aus dem AD erzeugt).

Gruß,
IT-Wurzel
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 11:22 Uhr
Hallo Uwe,

ja, die csv-Datei hat in diesem fall keine Überschrift und die Text-Elemente werden, mit Hochkommas erzeugt. eine (als Exe kompilierte) Pearl-Datei erzeugt aus dem AD diese csv-Datei ohne Überschriften, welche dann in unsere Telefonanlage eingelesen werden soll (Adressbuch), halt nur mit
vollständiger Telefonnummer.


Gruß,
IT-Wurzel
Bitte warten ..
Mitglied: colinardo
LÖSUNG 13.08.2014, aktualisiert um 12:51 Uhr
na dann z.B. mit Powershell so:
01.
$fileIN = "C:\file_in.csv" 
02.
$fileOUT = "C:\file_out.csv" 
03.
$preNumber = '+49-40-1234-' 
04.
$content = (gc $fileIN | out-string).Replace("'","""") 
05.
$objCSV =  ConvertFrom-Csv $content -Delimiter ";" -Header "1","2","3","4","5","6" 
06.
$objCSV | ?{$_.'4' -match "^\d{4}$"} | %{$_.'4' = "$preNumber$($_.'4')"} 
07.
($objCSV | ConvertTo-Csv -Delimiter ";" -NoTypeInformation | select -skip 1 | out-string).Replace("""","'") | set-content $fileOUT
oder ebenfalls mit Powershell in der Regular Expressions-Variante:
01.
$fileIN = "C:\file_in.csv" 
02.
$fileOUT = "C:\file_out.csv" 
03.
$preNumber = '+49-40-1234-' 
04.
$content -replace "^([^;]*;[^;]*;[^;]*;')(\d{4})('.*)$",('$1'+$preNumber+'$2$3') | set-content $fileOUT
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 12:23 Uhr
Hallo Uwe,

wow, danke für die schnelle Antwort... das Skript wirft mir eine Fehlermeldung aus:

ERROR: Unerwartetes Token ".4" im Ausdruck oder in der Anweisung.
ERROR: Bei C:\!Teleliste_CSV_ändern.ps1:5 Zeichen:19
ERROR: + $objCSV | ? { $_.4 <<<< -match "^\d{4}$" } | %{ $_.4 = "+49-40-1234-$($_.4)" }
ERROR: + CategoryInfo : ParserError: (.4:String) [], ParseException
ERROR: + FullyQualifiedErrorId : UnexpectedToken
ERROR:

hast Du eine Idee?

Vielen Dank & Gruß,
Mario
Bitte warten ..
Mitglied: colinardo
13.08.2014, aktualisiert um 12:44 Uhr
OK, dann hast du noch eine ältere Powershell-Version. Mindestens PS3.0 benötigt.
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 12:38 Uhr
leider funktioniert das auch nicht, jetzt kommt folgende FM:

ERROR: Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "Replace" enthält.
ERROR: Bei C:\!Teleliste_CSV_ändern.ps1:4 Zeichen:32
ERROR: + $content = (gc $fileIN).Replace <<<< ("'", """")
ERROR: + CategoryInfo : InvalidOperation: (Replace:String) [], RuntimeException
ERROR: + FullyQualifiedErrorId : MethodNotFound
ERROR:

...
Bitte warten ..
Mitglied: colinardo
13.08.2014, aktualisiert um 12:45 Uhr
einen moment, war noch nicht kompett für PS 2.0 angepasst. Würde dir aber raten auf mindestens PS 3.0 aufzurüsten ...
so jetzt läufts auch mit PS 2.0

UPDATEN !!
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 12:49 Uhr
GRANDIOS ...

jetzt läuft es, und ich gelobe auf PS 3.0 aufzurüsten


Vielen, vielen Dank
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 16:47 Uhr
Hi,

zu Deiner super Lösung von Oben, habe ich gerade noch einen Fall in der csv-Datei gefunden, der bei ca. 2000 Zeilen erst weiter unten vorkam.
Nämlich das in Spalte 4 auch der Ausdruck
'User-Nachname5';'User-Vorname5';'';'0015112345678';'Abt. 1';''
vorkommen kann.

Jetzt habe ich versucht - auch aus Handbüchern - abzuleiten, wie ich Dein Skript um folgende Änderung in der Zieldatei erweitern kann, leider habe ich so gar kein Erfolg dabei gehabt. Kannst Du mir helfen?

Ergebnis: 'User-Nachname5';'User-Vorname5';'';'+49-15112345678';'Abt. 1';''

Also anstelle der ersten beiden "00" einfach ein "+49-" voranstellen.

Vielen Dank
Bitte warten ..
Mitglied: colinardo
LÖSUNG 13.08.2014, aktualisiert um 19:56 Uhr
nur Zeile 7 ist hinzugekommen
01.
$fileIN = "C:\file_in.csv" 
02.
$fileOUT = "C:\file_out.csv" 
03.
$preNumber = '+49-40-1234-' 
04.
$content = (gc $fileIN | out-string).Replace("'","""") 
05.
$objCSV =  ConvertFrom-Csv $content -Delimiter ";" -Header "1","2","3","4","5","6" 
06.
$objCSV | ?{$_.'4' -match "^\d{4}$"} | %{$_.'4' = "$preNumber$($_.'4')"} 
07.
$objCSV | ?{$_.'4' -match '^00.{3,}'} | %{$_.'4' = $_.'4' -replace '^00','+49-'} 
08.
($objCSV | ConvertTo-Csv -Delimiter ";" -NoTypeInformation | select -skip 1 | out-string).Replace("""","'") | set-content $fileOUT
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
Bitte warten ..
Mitglied: IT-Wurzel
13.08.2014 um 19:56 Uhr
Spitze, ich hatte einfach zu kompliziert gedacht und dementsprechend in meiner Lektüre nichts gefunden.
Vielen Dank.
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
CSV-Datei nach Excel importieren (5)

Frage von mrvfbnummer2 zum Thema Batch & Shell ...

Batch & Shell
gelöst Bestimmte Spalten aus TXT in CSV kopieren - ab Spalte AE gibt es Übertragungsfehler (9)

Frage von freshman2017 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Exchange Server

Mittels Batch-Script Exchange-Logs sammeln und archivieren

Anleitung von beidermachtvongreyscull zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Verschlüsselung & Zertifikate
SSL Zertifikat für HTTPS (26)

Frage von Hendrik2586 zum Thema Verschlüsselung & Zertifikate ...

Grafikkarten & Monitore
24" oder 27" mit Full HD oder doch mehr Auflösung? (20)

Frage von brutzler zum Thema Grafikkarten & Monitore ...

Netzwerke
Ip Adressenkonflikt bei Großfamilie (12)

Frage von gunter zum Thema Netzwerke ...