rjc-00
Goto Top

CSV Inhalt automatisch bearbeiten - Wert verschieben

Hallo zusammen,

leider komme ich mit meinen eigenen Anstrenungen (Newbie) in Bezug auf VB Scripts leider nicht weiter und verzweifele an der Lösung meines Problems.
Ich hoffe hier findet sich jemand der mir vielleicht freundlicherweise weiter helfen kann face-smile


Problem:
Meine Anwednung generiert eine CSV datei mit mehreren Werten welche wie folgt aussieht:

OrderDate,SalesChannel,SellerOrderID,SellerPart#,NeweggItem#,Quantity,ShippingMethod,ShipToFirstName,ShipToLastName,ShipToCompany,ShipToAddressLine1,ShipToAddressLine2,ShipToCity,ShipToState,ShipToPostalCode,ShipToCountry,ShipToPhone#

Im Feld
ShipToLastName
wird der komplette Name (Vor + Nachname z.B: "Markus Müller") hinterlegt. Die Anwendung kann den Vornamen und Nachnamen nicht speriert in der CSV hinterlegen. Somit möchte ich mit einem VB Script den Vornamen in das Feld
ShipToFirstName
automatisch verschieben lassen.

Wie kann ich mit dem VB Script die datei automatisch einlesen entsprechend abändern und wieder speichern?


Freue mich auf eure Rückmeldung!


Gruß

Roman

Content-Key: 423642

Url: https://administrator.de/contentid/423642

Printed on: April 24, 2024 at 20:04 o'clock

Mitglied: 138810
138810 Mar 01, 2019 updated at 16:38:48 (UTC)
Goto Top
Und wie stellst du dir vor einen Namen ala Max Müller Seppelhuber oder Helmut Jonas Günter von Hagen zu trennen und korrekt zuzuordnen??
Mit Regex kannst du zwar viel machen aber ob das dann wirklich alle Fälle korrekt berücksichtigt steht wohl in den Sternen. Da brauchst du dann schon eine KI mit Vornamensverzeichnis wenn du hinterher nicht alle nochmal überprüfen willst.
Für die simplen Fälle zum Trennen der Namen findest du hier schon diverse Threads.
Member: RJC-00
RJC-00 Mar 01, 2019 at 16:43:27 (UTC)
Goto Top
Das ist ein guter Einwand. In meinem Fall ist es nicht ganz so wichtig, dass es 100% stimmt. Es handelt sich auch um englische Namen die in der Regel nicht mehrere Vornamen angeben. Wenn mal ein Teil des Vornamens mit im Nachnamen steckt wird das passen.
Mitglied: 138810
138810 Mar 01, 2019 updated at 16:57:42 (UTC)
Goto Top
Dann nimm gleich die Powershell, damit geht das ratz fatz
$csv = import-csv 'd:\datei.csv' -delimiter ","  
$csv | %{
    $m = [regex]::match($_.ShipToLastName.Trim(),'(.+)\s+(.+)')  
    $_.ShipToFirstName = $m.Groups[1].Value
    $_.ShipToLastName = $m.Groups[2].Value
}
$csv | export-csv 'd:\datei_neu.csv' -delimiter ";" -NoType -Encoding UTF8  
VBA ist mir jetzt zu viel Tipperei.
Member: RJC-00
RJC-00 Mar 01, 2019 at 17:21:15 (UTC)
Goto Top
Perfekte Antwort!

Hat direkt funktioniert face-smile. Damit ist der Tag gerettet ^^

Ich hoffe es ist nicht zuviel verlangt wenn ich dich folgendes noch frage:

"Wie kann ich die import csv im Verzeichnis laden (ist nur eine Datei) wenn der Dateiname immer unterschiedlich ist. Diese soll nach der Ausführung des Skripts gelöscht werden. Die Ausgabedatei soll mit aktuellem Datum im Dateinamen gespeichert werden z.B: datei_01.03.19.csv"


Danke vielmals für deine schnelle Antwort!
Mitglied: 138810
138810 Mar 01, 2019 updated at 20:26:18 (UTC)
Goto Top
gci 'd:\ordner' -Filter *.csv -File | %{  

    $csv = import-csv $_.Fullname -delimiter ","  
    $csv | %{
        $m = [regex]::match($_.ShipToLastName.Trim(),'(.+)\s+(.+)')  
        $_.ShipToFirstName = $m.Groups[1].Value
        $_.ShipToLastName = $m.Groups[2].Value
    }
    $csv | export-csv "$($_.DirectoryName)\datei_$(get-date -f 'dd.MM.yy').csv" -delimiter ";" -NoType -Encoding UTF8  
    remove-item $_.Fullname -Force
}