在C中逐行读取文件



前言:

这个问题是关于逐行读取文件,并将每一行插入到链表中。

我已经编写了链表的实现,并手动测试了insert()函数。这是有效的。我还编写了从文件中读取文本并将其写出的代码。同样,这也是有效的。

好的:这是我的问题

如何合并这些概念,并编写一个函数,逐行读取文件中的文本将每一行作为节点插入链表

读取文件时,我会执行以下操作:

//Code for reading a file
int c;
while((c = getc(f))!= EOF) {
    putchar(c);  //Prints out the character
}
fclose(f);  //Close the file

insert()函数接受两个参数,一个是链表头节点,另一个是要保存在该节点中的dataEntry("string")。

void insert(node_lin *head, char *dataEntry) { ... }

因此,由于函数getc分别获取每个字符,而putchar将每个字符写到屏幕上,我想象代码会沿着以下几行做一些事情:

  • 读取每个字符直到文件结束(EOF)
  • 对于每个字符,直到到达新行('\n'),将其附加到以前读取的字符上(构建一个"字符串")
  • 如果到达行的末尾,请将此"字符串"插入到链接列表中
  • 重复直到达到EOF

     //Code for reading a file
     int c;
     while((c = getc(f))!= EOF) {
          //Build a string here consisting of characters from c, until reaching a new line.
          /*
          if(c == 'n') {  //Indicates a new line
              //Insert the line you have into the linked list: insert(myLinkedList, line);
          }
          */
     }
     fclose(f);  //Close the file
    

问题是,我已经有了一个正在工作的read_file函数,以及一个正在运行的insert()函数。我需要帮助的是将文件分成几行,然后插入这些行。

谢谢大家!

将逐字符读取替换为更高级的内容。

  • 最典型的选择是fgets(),但这需要为线的长度指定一个静态限制
  • 如果你有getline(),你可以使用它,它可以处理任何线路长度,但它是POSIX,而不是standarc C

此外,您应该更改insert()函数以接受const char *作为第二个参数(当然,请记住在内部分配内存并复制文本)。

您可以使用fgets从文件中读取整行,直到遇到新的行字符

fgets (buffer, 128, f);

读取文件时,可以执行以下操作:

//Code for reading a file
char buffer[128];                 // decide the buffer size as per your requirements.
while((fgets (buffer, 128, f))!= NULL) {
    printf (buffer);
}
fclose(f);  //Close the file

相关内容

  • 没有找到相关文章

最新更新