从文件中保存变量?

时间:2016-11-30 10:41:37

标签: c file char spaces

我试图读取行并从中提取信息。我的文字有例如;

abate   terminar, hacer cesar
abated  amainado, amplacado, mitigado

这是一本字典。 第一个词是英语,其余的是西班牙语。我试图将英语单词保存到一个变量中,然后将该行的其余部分保存到另一个变量中。我不知道该怎么做?我编写了这段代码,它读取所有文本文件并将其全部打印出来。

int main(int argc, const char * argv[]) {

    char filename[] = "/Users/MyName/Desktop/span.rtf";
    FILE *file = fopen ( filename, "r" );

    if (file != NULL) {
        char line [1000];
        while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
                fprintf(stdout,"%s",line);        }

        fclose(file);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

这是一个很好的开始,使用fgets()读取整行,然后可以解析这是一个很好的方法。

接下来,您需要考虑如何存储字典。一种方法可能是静态大小的结构数组:

struct {
 char *english;
 char *spanish;
} words[1000];

这假定不超过1000个单词。

要存储每一行​​,只需找到第一个空格字符,然后将其分为英语和西班牙语:

size_t word_count = 0;
while(fgets(line, sizeof line, file) != NULL)
{
  char * const sp = strchr(line, ' ');
  if(sp != NULL)
  {
    *sp = '\0';
    while(isspace((unsigned char) *++sp))
      ;
    if(isalpha((unsigned char) *sp)
    {
      words[word_count].english = strdup(line);
      words[word_count++].spanish = strdup(sp);
    }
  }
}

这样的事情应该让你开始。这假定存在strdup(),如果你没有重新实施它是微不足道的。当然,您应该添加代码来检查内存分配失败。

答案 1 :(得分:0)

试试这个:

char english[256];
char spanish[256];

while(fscanf(file,"%[a-z]%*[ ]%[a-z, ]\n", english, spanish) != 0) {
    fprintf(stdout, "English: %s\n Spanish: %s\n", english, spanish);
}