【问题标题】:Adding chars to char array from csv.从 csv 将字符添加到 char 数组。
【发布时间】:2015-10-27 11:00:19
【问题描述】:

我正在尝试获取一个 csv 文件并将其中的字符串分配给 csv。我已经尝试了几件事,但运气不佳。这是我到目前为止所拥有的:

int main(int argc, char* argv []) {
    FILE *file = fopen( argv[1], "r" );
    int x;
    char strings[50];
    while  ((x = fgetc(file)) != EOF) {
        printf( "%c", x);
    }
    fclose(file);

    return 0;
}

我已经创建了字符串 char 数组,但我不确定如何将 csv 的内容分配给它。有什么想法吗?

提前致谢。

【问题讨论】:

  • 你想要的行为不清楚。
  • 显示几行 csv 文件?

标签: c


【解决方案1】:

可以使用fgets直接读入数组strings-

char strings[255];                                    //give size accordingly
while(fgets(strings,sizeof strings,file)!=NULL) {     //iteratre until fgets return NULL 
    printf("%s", strings);                            //print string that is read from file
}

注意-

1.您还没有检查argc 的值以及fopenreturn 的值。您可能应该检查它们。

【讨论】:

    【解决方案2】:

    您可以使用按字符阅读的方法。边走边填满你的临时缓冲区,但注意不要溢出它。当您遇到分隔符时——列的逗号,行的换行符——处理当前缓冲区。

    重置缓冲区,调整当前行和列并重复直到找到文件末尾。当您要存储单元格的内容时,请务必进行复制,因为暂存缓冲区会被覆盖。

    这里有一个简单的例子,只打印数据:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    {
        FILE *file = fopen("example.csv", "r");
        // check for errors
    
        char buf[50];
        int nbuf = 0;
    
        int row = 0;
        int col = 0;
    
        for (;;) {
            int c = fgetc(file);
    
            if (c == EOF) break;
    
            if (c == '\n' || c == ',') {
                buf[nbuf] = '\0';
                printf("[%d][%d] '%s'\n", row, col, buf);
                nbuf = 0;
    
                if (c == ',') {
                    col++;
                } else {
                    col = 0;
                    row++;
                }      
            } else {
                if (nbuf + 1 < sizeof(buf)) buf[nbuf++] = c;
            }        
        }
    
        fclose(file);
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2021-03-18
      • 2016-02-05
      • 1970-01-01
      • 2011-04-03
      • 2014-03-25
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多