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, 847 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 ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...