Как удалить указанный c столбец файла CSV, используя c - PullRequest
0 голосов
/ 03 февраля 2020

Это мой CSV-файл, я хочу получить указанные c строки, чьи Имя начинаются с "A", только с 1,2 и 6 столбцами. Например, столбец типа bread, anname, Ot не должен присутствовать в выходных данных. Я приложил вход и выход, который мне требуется. любезно помогите.

Ввод, как показано ниже:

Name,id,bread,anName,Ot,number
A,1,animal,tiger,op,2.1vd
M,2,animal,toper,ip,9.1vd
A1,7,animal,dog,cp,Na11
A2,9,animal,mouse,ap,0
A23,9,animal,pouch,gp,Na11

Выход должен быть:

A,1,2.1vd
A1,7,Na11
A2,9,0
A23,9,Na11

Код

#include <stdio.h>
#include <stdlib.h>

#define NUMLETTERS 5000

typedef struct {
    char Name[100];
    int id;
    char bread[200];
    char anName[200];
    char ot[200];
    char Number[200];

} record_t;

int main (int argc, char **argv) {

    record_t records[NUMLETTERS];
    char buf[6 * NUMLETTERS] = "";
    int count = 0, i;

    /* use filename provided as 1st argument (stdin by default) */
    FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
      fp = fopen("letters.csv", "r");

    if (!fp) {  /* validate file open for reading */
        perror ("file open failed");
        return 1;
    }

    while (fgets (buf, sizeof buf, fp)) {   /* read each line into buf */
        record_t tmp = { .Name = "" };    
        if (*buf != 'A')                    
            continue;
        if (sscanf (buf, " %99[^,],%d,%[^\n],%s,%s,%s",
                    tmp.Name, &tmp.id, tmp.bread, tmp.anName, tmp.Ot, tmp.Number) == 6)
            records[count++] = tmp;
        else
            fprintf (stderr, "%d A record - invalid format.\n", count + 1);
    }

    if (fp != stdin)   /* close file if not stdin */
        fclose (fp);

    for (i = 0; i < count; i++)
#ifdef WITHPIN
        printf ("%-8s %2d     %s,%s,%s,%s\n",
                records[i].Name, records[i].id, records[i].bread, records[i].anName, records[i].Ot, records[i].Number);
#else
        printf ("%-8s     %d,%s\n", records[i].Name, records[i].id, records[i].Number);
#endif
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...