Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...