Kundendaten.txt per batch bearbeiten
HILFE
Hallo zusammen,
bräuchte mal Hilfe bei einem Problem.
Ich habe eine Kundendatei welche ";" getrennt ist.
Problem 1: Nach und Vorname sind in einem Feld und durch ein "," getrennt.
Diese sollen aber in 2 Felder formatiert werden. (Max ; Mustermann) also erst der Vorname und dann der Nachname
Problem 2:
Dies soll aber nicht bei allen Feldern passieren (z.B. Firmen) Diese sind aber durch den Anredeindex erkenntlich 1:Firma 2: Mann 3:Frau 4:Frau (ex Fräulein ) also nur bei diesen.
Struktur der Daten geht nach den Namen noch weiter sind aber so in Ordnung
COMPANY; KUNDENNR;CODE;ANREDECODE;ANREDETEXT;NAME;.................
Jetzt sehen die Daten so aus
1;123456;2;Herr;Mustermann, Max;.....................
So sollten diese werden
1;123456;2;Herr;Max;Mustermann;.....................
und danach wieder den selben Dateinamen bekommen
kann mir jemand dabei helfen?
Danke
sledge1
Hallo zusammen,
bräuchte mal Hilfe bei einem Problem.
Ich habe eine Kundendatei welche ";" getrennt ist.
Problem 1: Nach und Vorname sind in einem Feld und durch ein "," getrennt.
Diese sollen aber in 2 Felder formatiert werden. (Max ; Mustermann) also erst der Vorname und dann der Nachname
Problem 2:
Dies soll aber nicht bei allen Feldern passieren (z.B. Firmen) Diese sind aber durch den Anredeindex erkenntlich 1:Firma 2: Mann 3:Frau 4:Frau (ex Fräulein ) also nur bei diesen.
Struktur der Daten geht nach den Namen noch weiter sind aber so in Ordnung
COMPANY; KUNDENNR;CODE;ANREDECODE;ANREDETEXT;NAME;.................
Jetzt sehen die Daten so aus
1;123456;2;Herr;Mustermann, Max;.....................
So sollten diese werden
1;123456;2;Herr;Max;Mustermann;.....................
und danach wieder den selben Dateinamen bekommen
kann mir jemand dabei helfen?
Danke
sledge1
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101872
Url: https://administrator.de/contentid/101872
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
10 Kommentare
Neuester Kommentar
Servus und Willkommen,
an deiner Stelle würde ich das mit Excel lösen.
Datei als .txt in Excel importieren - Spalte A anklicken und Die Sortierfunktion benutzen.
Runterscrollen - alle 2er markieren - ausschneiden in eine andere Tabelle einfügen und dann mit dem "Rest" durch markieren ausschneiden Spalte einfügen - inhalte einfügen - alte nun leere Spalte löschen und dann die vorher gesicherte Tabelle mit den Firmen wieder einfügen, als csv abspeichern und fertig.
Gruß
an deiner Stelle würde ich das mit Excel lösen.
Datei als .txt in Excel importieren - Spalte A anklicken und Die Sortierfunktion benutzen.
Runterscrollen - alle 2er markieren - ausschneiden in eine andere Tabelle einfügen und dann mit dem "Rest" durch markieren ausschneiden Spalte einfügen - inhalte einfügen - alte nun leere Spalte löschen und dann die vorher gesicherte Tabelle mit den Firmen wieder einfügen, als csv abspeichern und fertig.
Gruß
Moin sledge1,
Dir ist bewusst, dass bei Durchführung Deines Plans einige "Datensätze" eine andere Struktur haben werden als andere? "Personen"-Sätze dann ein "Feld" mehr als "Firmen"-Sätze.
Ich mein ja nur.... bevor ich da einen aufwändigen Oneliner zusammentrümmere...
Und der Teil des Plans "Originaldatei erstmal mit anderem Inhalt überschreiben" löst bei mir jedesmal einen Adrenalinschub aus..
Grüße
Biber
Dir ist bewusst, dass bei Durchführung Deines Plans einige "Datensätze" eine andere Struktur haben werden als andere? "Personen"-Sätze dann ein "Feld" mehr als "Firmen"-Sätze.
Ich mein ja nur.... bevor ich da einen aufwändigen Oneliner zusammentrümmere...
Und der Teil des Plans "Originaldatei erstmal mit anderem Inhalt überschreiben" löst bei mir jedesmal einen Adrenalinschub aus..
Grüße
Biber
Wäre es nicht einfacher - die Quelle (Datenbank) - die den export macht - umzustricken?
Ansonsten ein Ansatz - um die Firmen & Personen zu trennen
findstr /b 1 Kundendaten.txt >personen.txt
findstr /b 2 Kundendaten.txt >firma.txt
findstr /b 3 Kundendaten.txt >>personen.txt
findstr /b 4 Kundendaten.txt >>personen.txt
copy personen.txt + firma.txt Kundendaten.txt
Bezüglich Adrenalinschub: Bei "kundendaten" Umlauten und das dann noch Freitags Abends - krieg ich meinen Schub der Schübe.
Ich schieb jetzt ab N8
Gruß
edit - wie denn nun - 1 Mann oder 1 Firma?
1:Firma 2: Mann 3:Frau 4:Frau (ex Fräulein face-wink) also nur bei diesen.
Jetzt sehen die Daten so aus
1;123456;2;Herr;Mustermann, Max;.....................
"Herr" Firma Max Mustermann?Jetzt sehen die Daten so aus
1;123456;2;Herr;Mustermann, Max;.....................
Na ja,
sooooooo komplex ist es ja nicht, dass ich den ganzen Kram hier vorturnen muss.
Antesten würde ich es so (ob es überhaupt mt Batch funktionieren KANN, siehe T-Mos Anmerkung bzgl Umlauten und (ergänzend) Sonderzeichen wie "&", die dort auftauchen könnten).
Zum Aufwärmen:
Relativ simpel mit der Prüfung auf das 3. Token (%k) kann ich unterscheiden, ob es eine Firma (Kennzeichen "1" oder eine Person ist.9.
für den "Personen"-Fall muss nur die IF-Bedingung geändert werden in
Das bekommst Du allein hin....
Grüße
Biber,
der gleich ins WE fährt..
sooooooo komplex ist es ja nicht, dass ich den ganzen Kram hier vorturnen muss.
Antesten würde ich es so (ob es überhaupt mt Batch funktionieren KANN, siehe T-Mos Anmerkung bzgl Umlauten und (ergänzend) Sonderzeichen wie "&", die dort auftauchen könnten).
Zum Aufwärmen:
>for /f "delims=; tokens=1-5,*" %i in (e:\schnipsel\kunden.txt) do @echo %i;%j;%k;%l;%m;%n
1;123456;2;Herr;Mustermann, Max;.....................
1;123457;1;Firma;Mustermann, Max;.....................
1;123458;2;Frau;Musterfrau, Maxi;.....................
1;123459;3;Ex-Fräulein;Musterfrau, Frauke;.....................
1;1234006;2;Herr;Mustermann2, Max2;.....................
1;1234002;1;Firma;Mustermannfirma, Inc;.....................
(=19:14:09 D:\temp=)
>for /f "delims=; tokens=1-5,*" %i in (e:\schnipsel\kunden.txt) do @if "%k"=="1" @echo %i;%j;%k;%l;%m;%n
1;123457;1;Firma;Mustermann, Max;.....................
1;1234002;1;Firma;Mustermannfirma, Inc;.....................
(=19:14:13 D:\temp=)
für den "Personen"-Fall muss nur die IF-Bedingung geändert werden in
... do @if "%k" neq "1" @for /f "tokens=1-2 delims=, " %x in ("%m") do @echo %i;%j;%k;%l;%y;%x;%n
1;123456;2;Herr;Max;Mustermann;.....................
1;123458;2;Frau;Maxi;Musterfrau;.....................
1;123459;3;Ex-Fräulein;Frauke;Musterfrau;.....................
1;1234006;2;Herr;Max2;Mustermann2;.....................
Das bekommst Du allein hin....
Grüße
Biber,
der gleich ins WE fährt..
Hi sledge1,
wenn Du das mit VBScript erledigen möchtest dann schau doch mal hier:
Umkonvertieren von ASKII-Dateien per vbs
und zwar die Script Version von 15.11.2008 um 04:00:35 Uhr:
Du müsstest nur die entscheidende Prozedur schreib_neu etwas abändern
Gruss
Matthias
wenn Du das mit VBScript erledigen möchtest dann schau doch mal hier:
Umkonvertieren von ASKII-Dateien per vbs
und zwar die Script Version von 15.11.2008 um 04:00:35 Uhr:
Du müsstest nur die entscheidende Prozedur schreib_neu etwas abändern
Sub schreib_neu
Dim intpos(5)
' die ersten 5 Spalten in der CSV Datei sind hier wichtig
cString = LOGTXT
For i = 1 to 5
intpos(i) = InStr(cString,";")
If i = 1 Then Feld01 = Left(cString,intpos(i)-1)
If i = 2 Then Feld02 = Left(cString,intpos(i)-1)
If i = 3 Then Feld03 = Left(cString,intpos(i)-1)
If i = 4 Then Feld04 = Left(cString,intpos(i)-1)
If i = 5 Then Feld05 = Left(cString,intpos(i)-1)
cString = Right(cString,Len(cString)-intpos(i))
' den String linksseitig kürzen
Next
posKomma = InStr(Feld05,",")
Nachname = Left(Feld05,posKomma-1)
Vorname = Right(Feld05,Len(Feld05)-posKomma)
dSatz_neu = LOGTXT ' Zeile bleibt unverändert
If Feld03 > 1 Then ' Anredeindex nicht Firma
dSatz_neu = Feld01 &";" & Feld02 &";" & Feld03 &";" & Feld04 &";" & Vorname &";" & Nachname &";" & cString
End if
RechOut.WriteLine( dSatz_neu ) ' neuen Datensatz in Datei schreiben
End Sub
Gruss
Matthias