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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...