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

Kundendaten.txt per batch bearbeiten

Frage Entwicklung Batch & Shell

Mitglied: sledge1

sledge1 (Level 1) - Jetzt verbinden

14.11.2008, aktualisiert 28.11.2008, 4284 Aufrufe, 10 Kommentare

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
Mitglied: 60730
14.11.2008 um 18:48 Uhr
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ß
Bitte warten ..
Mitglied: Biber
14.11.2008 um 18:56 Uhr
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
Bitte warten ..
Mitglied: sledge1
14.11.2008 um 19:02 Uhr
Auch Moin,

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

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

Grüße
sledge1
Bitte warten ..
Mitglied: sledge1
14.11.2008 um 19:06 Uhr
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
Bitte warten ..
Mitglied: 60730
14.11.2008 um 19:11 Uhr
Zitat von sledge1:
Bezüglich deinenem Adrinalinschub
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

01.
findstr /b 1 Kundendaten.txt >personen.txt 
02.
findstr /b 2 Kundendaten.txt >firma.txt 
03.
findstr /b 3 Kundendaten.txt >>personen.txt 
04.
findstr /b 4 Kundendaten.txt >>personen.txt
.. und Sie wieder zu kombinieren
01.
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?
Bitte warten ..
Mitglied: sledge1
14.11.2008 um 19:17 Uhr
Ist leider nicht möglich bei export etaws zu ändern.

Interessanter Ansatz an diese Idee habe ich noch nicht gedacht.

Gruß
Bitte warten ..
Mitglied: sledge1
14.11.2008 um 19:22 Uhr
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
Bitte warten ..
Mitglied: Biber
14.11.2008 um 19:30 Uhr
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:
01.
>for /f "delims=; tokens=1-5,*" %i in (e:\schnipsel\kunden.txt) do @echo %i;%j;%k;%l;%m;%n 
02.
1;123456;2;Herr;Mustermann, Max;..................... 
03.
1;123457;1;Firma;Mustermann, Max;..................... 
04.
1;123458;2;Frau;Musterfrau, Maxi;..................... 
05.
1;123459;3;Ex-Fräulein;Musterfrau, Frauke;..................... 
06.
1;1234006;2;Herr;Mustermann2, Max2;..................... 
07.
1;1234002;1;Firma;Mustermannfirma, Inc;..................... 
08.
 
09.
(=19:14:09  D:\temp=) 
10.
>for /f "delims=; tokens=1-5,*" %i in (e:\schnipsel\kunden.txt) do @if "%k"=="1" @echo %i;%j;%k;%l;%m;%n 
11.
1;123457;1;Firma;Mustermann, Max;..................... 
12.
1;1234002;1;Firma;Mustermannfirma, Inc;..................... 
13.
 
14.
(=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
01.
... do @if "%k" neq "1" @for /f "tokens=1-2 delims=, " %x in ("%m") do @echo %i;%j;%k;%l;%y;%x;%n 
02.
1;123456;2;Herr;Max;Mustermann;..................... 
03.
1;123458;2;Frau;Maxi;Musterfrau;..................... 
04.
1;123459;3;Ex-Fräulein;Frauke;Musterfrau;..................... 
05.
1;1234006;2;Herr;Max2;Mustermann2;.....................
Das bekommst Du allein hin....

Grüße
Biber,
der gleich ins WE fährt..
Bitte warten ..
Mitglied: talkinghands
15.11.2008 um 13:23 Uhr
Hi sledge1,

wenn Du das mit VBScript erledigen möchtest dann schau doch mal hier:

http://www.administrator.de/Umkonvertieren_von_ASKII-Dateien_per_vbs.ht ...

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

01.
Sub schreib_neu 
02.
   Dim intpos(5) 
03.
   ' die ersten 5 Spalten in der CSV Datei sind hier wichtig 
04.
   cString = LOGTXT 
05.
   For i = 1 to 5 
06.
      intpos(i) = InStr(cString,";") 
07.
      If i =  1 Then Feld01 = Left(cString,intpos(i)-1) 
08.
      If i =  2 Then Feld02 = Left(cString,intpos(i)-1) 
09.
      If i =  3 Then Feld03 = Left(cString,intpos(i)-1) 
10.
      If i =  4 Then Feld04 = Left(cString,intpos(i)-1) 
11.
      If i =  5 Then Feld05 = Left(cString,intpos(i)-1) 
12.
      cString = Right(cString,Len(cString)-intpos(i)) 
13.
      ' den String linksseitig kürzen 
14.
   Next 
15.
   posKomma = InStr(Feld05,",") 
16.
   Nachname = Left(Feld05,posKomma-1) 
17.
   Vorname = Right(Feld05,Len(Feld05)-posKomma) 
18.
   dSatz_neu = LOGTXT ' Zeile bleibt unverändert 
19.
   If Feld03 > 1 Then ' Anredeindex nicht Firma 
20.
      dSatz_neu = Feld01 &";" & Feld02 &";" & Feld03 &";" & Feld04 &";" & Vorname &";" & Nachname &";" & cString 
21.
   End if 
22.
   RechOut.WriteLine( dSatz_neu )    ' neuen Datensatz in Datei schreiben 
23.
End Sub
Gruss

Matthias
Bitte warten ..
Mitglied: sledge1
28.11.2008 um 09:27 Uhr
Danke euch allen für eure Hilfe,

konnte das Thema in Perl erledigen.

Grüße Sledge1
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...