silicon Geschrieben 17. November 2003 Teilen Geschrieben 17. November 2003 Hi Leute, Ich muss ein relative kompliziertes CSV (nicht wirklich) auslesen. 10'PIA+5+000000000000001200'IMD+F++:::ExpressIdent bis 1 kg'MEA+WT+AAE+KGM:0.500'QTY+129:1:NPL'QTY+47:1:NPL'MOA+203:19.17'PRI+CAL:19.17:::1:15'RFF+ON:240825'RFF +AAM:P853793106366'DTM+95:20030811:102'TAX+7+VAT++C4+:::16.000'MOA+150:3.07'NAD+CN+0000180630++MUSTERMANN MAX+MUSTERSTR.2+MUSTERSTADT++80331+DE'ALC+A++++SH:::Nettowert'LIN+ Das ganze ist eine Zeile lang und wird nach LIN+ mit einem Zeilenumbruch getrennt. Danach gehts weiter mit dem nächsten Kundendatensatz. Hab das mit fscanf versucht, a la http://www.pronix.de/C/standard_C/c_programmierung_19_1.shtml#9 Jedoch hab ich das Problem, dass z.B. an erster Stelle die 10 die Position ist und automatisch hochzählt, name ist ja auch immer verschieden lang usw. desweiteren weiss ich nicht, was c da mit den ganzen + und ' anstellt. hab das mal mitm gdb debugged, aber sieht schlecht aus. hier mal bißchen code: while((fscanf(CSV,"%s'PIA+5+000000000000001200'IMD+F++:::ExpressIdent bis 1 kg'MEA+WT+AAE+KGM:0.500'QTY+129:1:NPL'QTY+47:1:NPL'MOA+203:19.17'PRI+CAL:19.17:::1:1 5'RFF+ON:%s'RFF+AAM:%s'DTM+95:20030811:102'TAX+7+VAT++C4+:::16.000'MOA+150:3.07'NAD+CN+ZILL MARIO+LEHMANNSTR. 30+DRESDEN++%s+DE'ALC+A++++SH:::Nettowert'LIN+\n" ,&position, &cust_key, &paket_nr, &plz)) != EOF ) { fprintf(stdout,"%s;%s;%s;%s;\n",position, cust_key, paket_nr, plz); } return 0; Is mir schon klar, dass da nur der "Zill Mario" gefunden wird, und das für != EOF-Zeilen, aber ich krieg halt n Core Dump und irgendwie läuft das alles nicht so toll. Vorallem, wenn ich z.B. den cust_key mit long einlese, krieg ich nur beschiessene werte. Weiss jemand, wie die syntax lauten muss, wenn sich z.b. der name usw. ändert? kann da ja schlecht mit nem festen string arbeiten. cheers, silicon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
need-some-blood Geschrieben 18. November 2003 Teilen Geschrieben 18. November 2003 Nochmal. Du willst eine CSV-Datei einlesen, und den Inhalt in verschiedende Variablen speichern. Richtig? Sind die Datensätze alle gleich lang? Dann könntest du den Dateiinhalt nach dem Auftretten der Kommas durchsuchen. Du weißt ja das alles bis zum ersten Komma das Datenfeld 1 (z.b. Nachname), alles zwischen Komma 1 und Komma 2 Datenfeld 2 (z.B Vorname) usw ist. Wird ein recht kleines Programm. Ähnlich diesem MVG need-some-blood Nachtrag ist die Datei den zwingend im CSV-Format? Sonst könntest du die Datei mit Hilfe von Strukturen direkt rauschreiben und lesen. Das ist wesentlich einfacher. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
silicon Geschrieben 18. November 2003 Autor Teilen Geschrieben 18. November 2003 Neinnein, es liegt als erzeugtes csv vor, aber ist ja eigentlich auch *******egal wie die endung ist, man kann ja alles unter unix öffnen. es hat eine feste struktur, ja, das stimmt, aber innerhalb der struktur, können die variablen wie "name" etc. unterschiedlich lang sein und sind nicht ' enclosed. hab´s eh schon fast. trotzdem danke... cheers, silicon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.