【问题标题】:C - Reading CSV file in char arrayC - 在字符数组中读取 CSV 文件
【发布时间】:2016-10-05 20:55:49
【问题描述】:

我在 C 编程方面经验很少,尤其是文件处理方面。我正在开发一个项目,我应该在其中创建一个注册/登录系统。我有一个 .csv 文件,其中的数据由 , 我要做的是将第一列和第二列分别读入两个字符数组。

char userLogin[100]; 
char userPassword[100];
FILE *file3 = fopen("C:\\Users\\Kshitiz\\Desktop\\BAAS\\signup_db.csv","r");
if(file3 != NULL){
        while(!feof(file3)){
        fscanf(file3,"%[^,],%s",userLogin,userPassword);
        puts(userLogin);
        puts(userPassword);
        }

    }


 fclose(file3);

signup_db.csv 的内容:

Username,Password
SBI063DDN,Qazwsx1234
ICICIDDN456,WSXEDC1234r

预期输出:

Username
Password

SBI063DDN
Qazwsx1234

ICICIDDN456
WSXEDC1234r

我得到的输出:

Username
Password

SBI063DDN
Qazwsx1234

ICICIDDN456
WSXEDC1234r


WSXEDC1234r

谁能帮我解决这个问题?谢谢!

【问题讨论】:

标签: c arrays file csv eof


【解决方案1】:

'fscanf()' 函数返回参数列表中成功填充的项目数。所以试试这个:

while(fscanf(file3,"%[^,],%s",userLogin,userPassword) == 2)
{
  puts(userLogin);
  puts(userPassword);
}

您提到的问题可能是因为文件末尾的换行符。当您阅读最后一行时,您还没有到达文件末尾。上面的代码解决了这个问题。

【讨论】:

    【解决方案2】:

    就我而言,我得到了预期的结果,但我不知道编译器是否存在差异,或者我的 csv 文件是否不同(我已尝试重新创建它)。这是解析文件的另一种方法,检查是否有预期的结果:

    #include <stdio.h>
    #include <string.h>
    
    #define LINE_LENGTH 1000
    
    int main(void) {
      char userLogin[100];
      char userPassword[100];
    
      char line[LINE_LENGTH];
      char *delimiter = ",";
      char *token;
    
      FILE *file3 = fopen("signup_db.csv", "r");
    
      while(fgets(line, LINE_LENGTH, file3) != NULL) {
        token = strtok(line, delimiter);
        printf("%s\n", token);
        token = strtok(NULL, delimiter);
        printf("%s\n", token);
      }
    
      fclose(file3);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多