解析2d字符数组

时间:2015-02-19 04:59:57

标签: c arrays file parsing

我有一个文本文件如下:

排名标题周末票房

1美国狙击手31,850,000美元

2 Paddington $ 8,505,000

我将每一行放入二维字符数组中。 我想将每一行分开并将所有排名放在一个数组中,将所有标题放在另一个数组中,将所有周末的标题放在另一个数组中。

如何解析char data[5][200]以便我只能获取字符串值。我正在考虑%s说明符的行,但我不知道使用哪种方法(新到c)。

//-------Text File Implementation-----------
    FILE *fp;
    char data[5][200];

    /* opening file for reading */
        fp = fopen("movie.txt", "r");
        if(fp == NULL) {
            perror("Error opening file");
            return(-1);
        }


        int i = 0;
        while(fgets (data[i], 200, fp)!=NULL)
        {
        /* writing content to stdout */
            puts(data[i]);
            i+=1;

        }

        fclose(fp);

2 个答案:

答案 0 :(得分:2)

您可以使用sscanf() link.

从文件中获取输入后,

  int val; 
  char name[255],char value[100];
  sscanf(data[i],"%d %[^$] %s",val,name,value);

答案 1 :(得分:1)

您可以使用strtok()

进行解析

在这里,您可以读取每一行,然后进行标记。这是一个你可以尝试的例子。

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

int main(int argc, char* argv[]) {
  char text[255] = "1 American Sniper $31,850,000";

  const char *rank = strtok(text, " ");
  const char *name = strtok(NULL, "$");
  const char *amount = strtok(NULL, "\n");

  printf("%s|%s|%s\n", rank, name, amount);
}

这输出&#34; 1 |美国狙击手| 31,850,000&#34;。您将丢失$符号,但您可以轻松地将其添加回来。

对于其余的代码结构,我建议创建一个行缓冲区来读取每一行并单独处理它,然后在此之后保留令牌。