簡體   English   中英

使用逗號解析 c 中的 a.csv 文件時出現問題

[英]Problems with parsing a .csv file in c using commas

我正在使用此代碼解析 C 中的 a.csv 文件。 如果字段的格式ENTRY1,ENTRY2,ENTRY3,ENTRY4或者即使這里有逗號,它也可以工作: ENTRY1, ENTRY2, ENTRY3, ENTRY4但是,如果在條目之后和逗號之前有空格,則程序崩潰。 像這樣: ENTRY1,ENTRY2,ENTRY3,ENTRY4代碼:

#include <stdio.h>
#include <string.h>

int main()
{
        FILE *input_fp =fopen("file", "r");
        char buf[100];

        while (fgets(buf, sizeof buf, input_fp) != NULL) {
                char field1[30], field2[30], field3[30], field4[30];
#define VFMT " %29[^ ,\n\t]" //Defines limit of one entry to be 30 characters
                int n; // Use to check for trailing junk

                if (4 == sscanf(buf, VFMT "," VFMT "," VFMT "," VFMT " %n", field1, field2,
                                field3, field4, &n) && buf[n] == '\0') {
                        // Suspect OP really wants this wfield1th to be 1 more
                        if (printf("%s %s %s %s\n", field1, field2, field3, field4) < 0)
                                break;
                } else
                        break; // format error
        }
        fclose(input_fp);
return 0;
}

示例運行:文件包含:

ENTRY1, ENTRY2, ENTRY3, ENTRY4
ENTRY5,ENTRY6,ENTRY7,ENTRY8
ENTRY5 , ENTRY6, ENTRY7, ENTRY8
ENTRY1, ENTRY2, ENTRY3, ENTRY4

output 是:

ENTRY1 ENTRY2 ENTRY3 ENTRY4
ENTRY5 ENTRY6 ENTRY7 ENTRY8

它在結束第三行之前停止並退出。

通過您的示例和預期的 output,我更喜歡使用fgetc來處理輸入字符。

這將允許我們解析和拒絕不需要的字符,從而避免存儲數據的開銷——如在fgets中然后解析存儲的數據。

結果( fputc )也可以定向到文件...

代碼看起來像這樣......希望這會有所幫助......

#include <stdio.h>

int main()
{
  FILE *input_fp =fopen("file", "r");
  int c;
  while ((c=fgetc(input_fp)) != EOF)
   {
      if(c == ' ' || c == '\t')//if space or tab
        ;                      //do nothing
      else
        fputc(c,stdout); //print c
   }
  fclose(input_fp);
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM