Превращение недостающего значения в ноль - PullRequest
0 голосов
/ 28 сентября 2019

Я работаю над длинным 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
...