Szöveg feldarabolása üres részek figyelembevételével
2018-12-25T11:19:20+01:00
2018-12-28T12:56:44+01:00
2022-08-11T09:05:29+02:00
gilba
Sziasztok!

A problémám az lenne, hogy egy nagy mennyiségű adatot tartalmazó .CSV fájlból olvasnék be adatokat soronként. Az adatok pontosvesszővel vannak elválasztva. Azonban vannak olyan sorok, melyekben egy két adat hiányos.
Pl.: 1. sor: 1234;asdf;56;78;gh
      2. sor: 9876;lkjh;;54;
      3. sor: ;xcvb;09;18;nm

Az strtok() függvénnyel próbálkoztam eddig, de ez a függvény nem veszi figyelembe az "üres" részeket. Van-e ötletetek? Válaszaitokat előre is köszönöm.
Mutasd a teljes hozzászólást!

  • Ha neked volnék, tákolnék egy saját strtok-változatot, ami úgy működik ahogy neked kell. De még ez sem lesz elég, kezelni kellene a macskakörmöket is, azok között akár soremelés is lehet. No mindegy, kezdetnek jó lesz:

    char *my_strtok_r (char *str, const char *sep, char **saveptr) { char *p; size_t partlen; if (str) p= str; else if (*saveptr) p= *saveptr; else return NULL; partlen= strcspn (p, sep); if (p[partlen]=='\0') { *saveptr= NULL; } else { *saveptr= &p[partlen+1]; p[partlen]= '\0'; } return p; } static void Test (char *from, const char *sep) { char *q, *r; char *saveptr; for (q= from; (r= my_strtok_r (q, sep, &saveptr))!=NULL; q= NULL) { printf ("\"%s\"\n", r); } }
    Mutasd a teljes hozzászólást!
  • Lábbalhajtós:

    #include <stdio.h> #include <string.h> int main(void) { char *strings[]={ "1234;asdf;56;78;gh", "9876;lkjh;;54;", ";xcvb;09;18;nm" }; char line[100]; for(int i=0;i<3;i++){ strcpy(line,strings[i]); char *end=line; while(*end){ if(*end==';') *end=0; end++; } char *tok=line; while(tok<=end){ printf("|%8s|",tok); tok+=strlen(tok)+1; } printf("\n"); } }
    Kipróbálható itt: Ideone.com
    Mutasd a teljes hozzászólást!
  • Programozási nyelvet nem írtál, sem felhasználást. Excel nem jó? Sima megnyitással pontosan ezt csinálja.
    Mutasd a teljes hozzászólást!
  • Lapteteje: Tudástár • Programozási nyelvek • C
    Mutasd a teljes hozzászólást!
  • Bocs, éjjel már lassabban mennek a dolgok. Egy, már kész CSV parser lib: libcsv
    Példákat is találsz benne. Nem tűnik bonyolultnak, bár én nem használtam.
    Mutasd a teljes hozzászólást!
Címkék
abcd