Schranzi 10 Geschrieben 8. Dezember 2005 Melden Geschrieben 8. Dezember 2005 Hallo Leuts, ich bräuchte eine Lösung für folgendes Problem: Ich habe eine csv Datei (Trennung der Felder durch ein Semikolon) in dieser Form: Vorname;Name;Straße;PLZ;Ort Jetz möchte ich mit einem Programm (vielleicht per VBS oder eine Batch -Datei) die Felder umstellen: Name;Vorname;PLZ;Ort;Straße Das Programm müsste folgenden können: 1. Man müsste dem Programm sagen woher die Daten kommen (Input) 2. Dem Programm sagen wie es die Daten (Felder) umzustellen hat (Output) 3. Ausführen programm.exe c:\daten\quelldatei.csv c:\daten\zieldatei.csv Vielleicht kann mir jemand helfen, wäre klasse! Gruß Schranzi PS: Die Lösung ist egal, dass Ergebnis ist wichtig! Zitieren
cablit 10 Geschrieben 8. Dezember 2005 Melden Geschrieben 8. Dezember 2005 Hi Schranzi, das wäre im Prinzip eine simple Parsing-Lösung ... aber mir ist kein Tool bekannt, mit dem man das lösen könnte. Wenn die Zeit nicht drängelt, könnt ich dir da was stricken, das wird aber heut und morgen nicht fertig. Grüße Zitieren
checkms 10 Geschrieben 8. Dezember 2005 Melden Geschrieben 8. Dezember 2005 Hi, Warum machst du das nicht direkt mit Excel ...wenns mehr wird mit´nem Makro ;) Zitieren
pillendreher 10 Geschrieben 8. Dezember 2005 Melden Geschrieben 8. Dezember 2005 Hi, Warum machst du das nicht direkt mit Excel ...wenns mehr wird mit´nem Makro ;) Ja, so mach ich das auch immer - und geht auch recht schnell Zitieren
sfoc 10 Geschrieben 8. Dezember 2005 Melden Geschrieben 8. Dezember 2005 @echo off set fidIn=%1 set fidOut=%2 set execPrg=%3 for /f "tokens=1-5* delims=;" %%0 in (%fidIn%) do ( REM ~ echo %%1;%%0;%%3;%%4;%%2 REM ~ echo %%1;%%0;%%3;%%4;%%2 >> %2 echo %%1;%%0;%%3;%%4;%%2 >> %fidOut% ) start %execPrg% %fidOut% filename inputfile outputfile program gruesse, sfoc Zitieren
Schranzi 10 Geschrieben 8. Dezember 2005 Autor Melden Geschrieben 8. Dezember 2005 Danke erstmal für eure Hilfe. Nur mit dem Code von sfoc kann ich leider noch nichts anfangen. Erklär mir das bitte mal. Wäre echt klasse. Gruß Zitieren
sfoc 10 Geschrieben 9. Dezember 2005 Melden Geschrieben 9. Dezember 2005 :: keine ausgabe von message @echo off :: ersten parameter in variable fidIn speicher :: es handelt sich hierbei um die eingabedatei (Vorname;Name;Straße;PLZ;Ort) set fidIn=%1 :: zweiter parameter in variable fidOut speicher :: es handelt sich hierbei um die ausgabedatei (Name;Vorname;PLZ;Ort;Straße) set fidOut=%2 :: dritter parameter in variable execPrg speicher :: angabe des programs welches anschliessend ausgefuehrt werden soll (notepad) set execPrg=%3 :: schleife ueber alle zeilen welche sich in der eingabedatei (fidIn) befinden :: tokens = zeichen = 5; delims = zeichentrenner (feldtrenner) :: %%0 wird der erste wert gespeichert, die anderen werte in der zeile werden :: automatisch den numerischen werten in aufsteigender reihenfolge zugewiesen :: %%A sit demnach auch moeglich for /f "tokens=1-5* delims=;" %%0 in (%fidIn%) do ( :: zwei kommentar zeilen, koennen auch entfernt werden REM ~ echo %%1;%%0;%%3;%%4;%%2 REM ~ echo %%1;%%0;%%3;%%4;%%2 >> %2 :: die werte in der gewuenschten sortierung in die ausgabedatei schreiben echo %%1;%%0;%%3;%%4;%%2 >> %fidOut% ) :: program starten parameteruebergabe ist die ausgabedatei start %execPrg% %fidOut% die datei sowie eine csv habe ich angefuegt, einfach in ein verzeichnis kopieren und wie folgt aufrufen csv.cmd t.csv o.txt notepad gruesse, sfoc Zitieren
Schranzi 10 Geschrieben 13. Dezember 2005 Autor Melden Geschrieben 13. Dezember 2005 Recht herzlichen Dank sfoc für deinen Code. Funktioniert wunderbar. Zitieren
Schranzi 10 Geschrieben 15. Dezember 2005 Autor Melden Geschrieben 15. Dezember 2005 Hallo Der Code funktioniert wunderbar unter W2K und XP. Was muss am Code geändert werden damit er unter Win 9x läuft? Vielen Dank im voraus. Gruß Schranzi Zitieren
lefg 276 Geschrieben 15. Dezember 2005 Melden Geschrieben 15. Dezember 2005 Schau mal, ob w9x den /f von for überhaupt kennt! Zitieren
maneich 10 Geschrieben 15. Dezember 2005 Melden Geschrieben 15. Dezember 2005 Hallo, der For-Befehl unter Win98/ME kennt weder "/f " noch "tokens=?" noch "delims=?". Unter diesen Systemen mußt Du Dir mit einem Tool mit dem Namen "LMOD" behelfen. Außerdem für den Zähler noch "VARSET", beides Freeware und sehr gut von http://home.mnet-online.de/horst.muc/german.htm. Hier mußt Du das ganze ohne "for" in einer Schleife ablaufen lassen z.B.: @echo off cls set fidIn=%1 set fidOut=%2 set execPrg=%3 call varset x=lines of %fidIn% call var set y=1 :zs1 type %fidIn%|lmod /S,; /L%y% [$2];[$1];[4];[$5];[3]>>%fidOut% if %y%==%x% goto zs2 call var set y=%y%+1 goto zs1 :zs2 start %execPrg% %fidOut% cls Ist also fast das gleiche, nur daß dazu etwas fremde Hilfe (Tools) benötigt wird. Läuft auch unter W2K/XP MfG maneich Zitieren
micha42 29 Geschrieben 15. Dezember 2005 Melden Geschrieben 15. Dezember 2005 Wow Respect. ein schönes schlankes Script zum lernen. Danke Der Code funktioniert wunderbar unter W2K und XP. Was muss am Code geändert werden damit er unter Win 9x läuft? update Windows call code :D Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.