Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

schwieriges csv lesen

Empfohlene Antworten

Veröffentlicht

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

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.