Како прочитати ЦСВ датотеку у Ц

Погледајте документацију програма који обезбеђује ЦСВ датотеку. Одредите број поља у сваком реду, као и формат сваког поља. На пример, ако програм обезбеди ЦСВ са следећим подацима: 1, "тест", 34.5 Означили бисте три поља: један цео број, један низ и један број са покретним зарезом.

Направите структуру која садржи члана података за свако поље идентификовано у ЦСВ-у. Користећи дати пример реда 1, "тест", 34.5, потребна вам је следећа структура: струцт дата { инт цол1; цхар *цол2; флоат цол3; };

Креирајте метод у свом програму који ће управљати читањем ЦСВ датотеке. Ово ће морати да буде доступно остатку вашег програма и вероватно ће морати да ради на уобичајеним структурама података тако да друге методе могу да приступе подацима који су учитани. Проследите параметар по референци да бисте уклонили потребу за повратном вредношћу. Пример прототипа функције би био: воид ПарсеЦСВ( цхар *име датотеке, подаци& инпут);

Креирајте фајл објекат, који ће читати податке, користећи следећи код: ФИЛЕ * пИнпут;

Направите бафер знакова довољно велик да задржи један по један ред датотеке. Због ограничења језика, најједноставнији начин да се то уради је да се декларише низ знакова довољно велике величине, као са: #дефине БУФФЕР_СИЗЕ 1024

Отворите датотеку са следећим кодом и доделите је свом претходно креираном ФИЛЕ објекту: пИнпут = фопен("филенаме," "р")

фгетс (буф, сизеоф (буф), пИнпут)

Парсирајте ЦСВ користећи функцију „стрток“. Креирајте нови низ знакова који ће указивати на токене и иницијализовати га подацима из реда који је прочитан изнад: цхар *ток = стрток (буф, ",")

Претворите примљени токен у одговарајуће податке. Користећи пример реда: 1, "тест", 3.45 претворити податке садржане у "ток" у цео број користећи следећи код: ров.цол1 = атои (ток);

За наредна читања из исте линије, проследите „стрток“ параметар НУЛЛ уместо стринга бафера који сте претходно прочитали: ток = стрток (НУЛЛ, „,“) Затим конвертујте токен у одговарајући тип података. Користећи пример реда 1,"тест",3.45 Код за рашчлањивање за једну линију би био: цхар *ток = стрток (буф, ","); ред.цол1 = атои (ток); ток = стрток (НУЛЛ, ","); ров.цол2 = ток; ток = стрток (НУЛЛ, ","); ров.цол3 = атоф (ток);

Урадите ово за све уносе у сваком реду ЦСВ-а. Функција „стрток“ ће наставити да пружа податке између вредности зареза све док јој не понестане података у баферу, у ком тренутку ће вратити НУЛЛ. Ово ће показати да сте завршили са линијом.

Упозорење

Функција "фопен" може да врати НУЛЛ ако је дошло до грешке - обавезно проверите датотеку пре него што је употребите. У неким случајевима, понуђени токени можда неће бити у очекиваном формату. Обавезно проверите своје податке пре слепо конвертовања тако што ћете проверити уобичајене вредности грешке (празан стринг, НУЛЛ, итд.).