Skatiet tās programmas dokumentāciju, kas nodrošina CSV failu. Nosakiet lauku skaitu katrā rindā, kā arī katra lauka formātu. Piemēram, ja programma nodrošina CSV failu ar šādiem datiem: 1, "test", 34.5. Jums ir jāatzīmē trīs lauki: viens vesels skaitlis, viena virkne un viens peldošā komata skaitlis.
Izveidojiet struktūru, kurā ir ietverts datu elements katram CSV failā norādītajam laukam. Izmantojot sniegto 1. piemēra rindiņu "test", 34.5, jums būs nepieciešama šāda struktūra: struct data { int col1; char *col2; pludiņš col3; };
Programmā izveidojiet metodi, kas nolasīs CSV failu. Tam būs jābūt pieejamam pārējai jūsu programmas daļai, un, iespējams, būs jāstrādā pie kopīgām datu struktūrām, lai citas metodes varētu piekļūt nolasītajiem datiem. Nododiet parametru ar atsauci, lai noņemtu vajadzību pēc atgriešanas vērtības. Funkcijas prototipa piemērs varētu būt: void ParseCSV( char *faila nosaukums, dati un ievade );
Izveidojiet faila objektu, kas nolasīs datus, izmantojot šādu kodu: FILE * pInput;
Izveidojiet rakstzīmju buferi, kas ir pietiekami liela, lai vienlaikus ievietotu vienu faila rindiņu. Valodas ierobežojumu dēļ visvienkāršākais veids, kā to izdarīt, ir deklarēt pietiekami liela izmēra rakstzīmju masīvu, piemēram: #define BUFFER_SIZE 1024
Atveriet failu ar šādu kodu un piešķiriet to iepriekš izveidotajam FILE objektam: pInput = fopen("faila nosaukums", "r")
fgets (buf, sizeof (buf), pInput)
Parsējiet CSV, izmantojot funkciju "strtok". Izveidojiet jaunu rakstzīmju virkni, lai norādītu uz marķieriem, un inicializējiet to ar datiem no rindas, kas lasīta iepriekš: char *tok = strtok (buf, ",")
Pārvērtiet saņemto marķieri atbilstošajos datos. Izmantojot piemēra rindiņu: 1, "test", 3.45 konvertējiet "tok" ietvertos datus par veselu skaitli, izmantojot šādu kodu: row.col1 = atoi (tok);
Turpmākajiem nolasījumiem no tās pašas rindas nododiet "strtok" NULL parametru, nevis bufera virkni, kuru lasījāt iepriekš: tok = strtok (NULL, ",") Pēc tam konvertējiet marķieri uz atbilstošo datu tipu. Izmantojot 1. rindas piemēru "test",3.45. Parsēšanas kods vienai rindai būtu šāds: char *tok = strtok (buf, ","); rinda.col1 = atoi (tok); tok = strtok (NULL, ","); rinda.col2 = tok; tok = strtok (NULL, ","); rinda.col3 = atof (tok);
Dariet to visiem ierakstiem katrā CSV faila rindā. Funkcija "strtok" turpinās nodrošināt datus starp komatu vērtībām, līdz buferī beigsies dati, un tad tā atgriezīs NULL. Tas norādīs, ka esat pabeidzis līniju.
Brīdinājums
Funkcija "fopen" var atgriezt NULL, ja ir radusies kļūda — noteikti pārbaudiet failu pirms tā izmantošanas. Dažos gadījumos nodrošinātie marķieri var nebūt paredzētajā formātā. Pirms aklas konvertēšanas noteikti pārbaudiet savus datus, pārbaudot, vai tie atbilst izplatītākajām kļūdu vērtībām (tukša virkne, NULL utt.).