sledge1
Goto Top

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 face-wink) 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

Content-ID: 101872

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

Ausgedruckt am: 05.11.2024 um 06:11 Uhr

60730
60730 14.11.2008 um 18:48:25 Uhr
Goto Top
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ß
Biber
Biber 14.11.2008 um 18:56:12 Uhr
Goto Top
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
sledge1
sledge1 14.11.2008 um 19:02:05 Uhr
Goto Top
Auch Moin,

Ja ist mir bewusst, dass die Stuktur sich ändert. Ist aber kein Problem.

Bezüglich deinenem Adrenalinschub face-wink Diese Datei wird jeden Tag neu erstellt. Möglich wäre schon die Original Datei in Backup.txt zu ändern.

Grüße
sledge1
sledge1
sledge1 14.11.2008 um 19:06:05 Uhr
Goto Top
Danke sehr,

In Excel ist dies Leider nicht möglich. Diese Batch muss jeden Tag neu laufen. Auf dem Server ist auch kein Excel drauf.
Sonnst wäre das eine Alternative

Grüße
sledge1
60730
60730 14.11.2008 um 19:11:39 Uhr
Goto Top
Zitat von @sledge1:
Bezüglich deinenem Adrinalinschub face-wink
Diese Datei wird jeden Tag neu erstellt.

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
.. und Sie wieder zu kombinieren
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?
sledge1
sledge1 14.11.2008 um 19:17:20 Uhr
Goto Top
Ist leider nicht möglich bei export etaws zu ändern.

Interessanter Ansatz an diese Idee habe ich noch nicht gedacht.

Gruß
sledge1
sledge1 14.11.2008 um 19:22:29 Uhr
Goto Top
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?

Feld 1 muss nicht berücksichtigt werden. Ist die interne Company und nicht der Anredecode.Habe ich vergessen zu sagen

Gruß und N8
Biber
Biber 14.11.2008 um 19:30:35 Uhr
Goto Top
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:
>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=)
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
... 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..
talkinghands
talkinghands 15.11.2008 um 13:23:30 Uhr
Goto Top
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

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
sledge1
sledge1 28.11.2008 um 09:27:33 Uhr
Goto Top
Danke euch allen für eure Hilfe,

konnte das Thema in Perl erledigen.

Grüße Sledge1