Я работаю над длинным cvs
файлом, но многие значения пустые.Моя цель - прочитать каждую строку и сохранить ее значения в массиве, но пропущенные значения меняют мои результаты.Как я могу решить эту проблему?
Когда я превращаю (вручную) пропущенные значения строки в нули, мой код работает нормально.Однако файл слишком велик, чтобы делать все вручную.
main.c:
int main(int argc, char *argv[])
{
FILE *input;
int length = 1875; // size of given cvs
open_input(argv, &input);
function(argv, length, output, &input);
fclose(input);
return 0;
}
functions.c:
#define MAX 50
#define MAX_ 9
void metodo(char *argv[], int length, FILE *output, FILE **input)
{
const char *s = "1";
if(strcmp(argv[2],s)!=0)
{
return;
}
else
{
char line1[201];
fscanf(*input, "%200[^\n]", line1);
for(int i = 1; i < 2; i++) //I'm testing just one line of the file
{
char *Symposium = (char*)malloc(MAX);
char *Name = (char*)malloc(MAX);
char *Gender = (char*)malloc(MAX);
char *Country = (char*)malloc(MAX);
char *Core = (char*)malloc(MAX);
int y[34];
fscanf (*input, "%49[^,],%20[^,],%20[^,],%10[^,],%20[^,],%d,%d,%d,%d,%d,
%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,
%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
Symposium, Name, Gender, Country, Core,
&y[0], &y[1], &y[2], &y[3], &y[4], &y[5], &y[6], &y[7], &y[8], &y[9],
&y[10], &y[11], &y[12], &y[13], &y[14], &y[15], &y[16], &y[17], &y[18], &y[19],
&y[20], &y[21], &y[22], &y[23], &y[24], &y[25], &y[26], &y[27], &y[28], &y[29],
&y[30], &y[31], &y[32], &y[33]);
if(strcmp(Core, Name) != 0) //As Core name is missing, I create it
{
Core = "Core";
}
for(int i = 0; i < 34; i++) //The solution I was trying, but doesn't work well
{
if(y[i] != 1)
{
y[i] = 0;
}
printf("%s,%s,%s,%s,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d, %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
Symposium, Name, Gender, Country, Core,
y[0] , y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8], y[9],
y[10], y[11], y[12], y[13], y[14], y[15], y[16], y[17], y[18], y[19],
y[20], y[21], y[22], y[23], y[24], y[25], y[26], y[27], y[28], y[29],
y[30], y[31], y[32], y[33]);
} //"for" end
}
}
}
Командная строка: ./main file.csv 1
file.csv
(первые 2 строки):
Event,Name,Gender,Country,Nuclei,1984,1985,1986,1987,1988,1989,1991,1992,1993,1994,1995,1996,1997,1998,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019
SBT,Adalberto,male,Brasil,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
Вывод:
SBT,Adalberto,male,Brasil,Core,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Ожидаемый вывод:
SBT,Adalberto,male,Brasil,Core,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0