用c语言将表格数据读写到文本文件的标准(或方便)方法

用c语言将表格数据读写到文本文件的标准(或方便)方法,c,text,delimiter,tabular,C,Text,Delimiter,Tabular,这听起来可能有点尴尬,但我想问一下,是否有一种常用的方法将表格数据存储在文本文件中,以便用C进行读写 与python中一样,您可以通过f.readlines将全文文件加载到数组中,然后遍历所有行并按特定字符或字符序列(分隔符)拆分每行 在C语言中如何处理这个问题?与在其他语言中处理这个问题的方式几乎相同。选择一个字段分隔符(即,选项卡字符),打开文本文件以读取和分析每一行 当然,在C中,它永远不会像在Python中那样简单,但是方法是相似的。有一些机制,但是脚本语言在过去的二十年中变得如此流行是

这听起来可能有点尴尬,但我想问一下,是否有一种常用的方法将表格数据存储在文本文件中,以便用C进行读写

与python中一样,您可以通过
f.readlines
将全文文件加载到数组中,然后遍历所有行并
按特定字符或字符序列(分隔符)拆分每行


在C语言中如何处理这个问题?

与在其他语言中处理这个问题的方式几乎相同。选择一个字段分隔符(即,
选项卡
字符),打开文本文件以读取和分析每一行


当然,在
C
中,它永远不会像在
Python
中那样简单,但是方法是相似的。

有一些机制,但是脚本语言在过去的二十年中变得如此流行是有原因的——在脚本语言中看似简单的一些任务在C中是繁重的

  • 您可以使用和为表编写解析器。只有在格式定义良好且“静态”的情况下,这才真正起作用。它们是令人惊奇的工具,可以做的事情比你想象的要多,但对于在脚本语言中使用
    split()
    就可以完成的事情来说,它们是非常繁重的机器

  • 您可以使用
    getdelim(3)
    读取单个字段。然而,这只是在POSIX.1-2008中标准化的,所以这远远不是普遍存在的。(每个带有glibc的Linux机器都应该有它们。)

  • 您可以使用
    fgets(3)
    读取行,并使用
    strchr(3)
    发现拆分位置

  • 您可以使用
    fgets(3)
    读取行,并使用
    strtok(3)
    标记字符串

  • 您可以使用
    scanf(3)
    一次完成输入和扫描;从这里的问题来看,
    scanf(3)
    很难正确使用

  • 您可以使用一次一个字符的解析方法:使用
    getc(3)
    读取字符,检查它,处理它,迭代直到没有更多字符


    • 哇。其他的答案让我有点困惑,这些答案让我觉得我是在Mainframes.stackexchange.com而不是stackoverflow.com上

      为什么不选择JSON或XML等现代数据格式,并遵循所选数据格式的最佳实践

      如果您想要一个好的JSON C读写器,我已经使用了,而且非常简单和快速

      如果您想要一个好的XML C读写器,我已经用过了,而且它也简单快捷。还具有SAX*和*DOM支持,具体取决于您希望如何读取XML

      显然,还有很多其他的图书馆


      请不要给下一个家伙来支持你的程序一些古怪的自定义文件格式来处理

      我发现并且非常方便(
      getline
      是一个gnu扩展,在POSIX.1-2008中标准化)

      我通常只使用fprintf和fscanf。对于可变长度行的读取,也可以使用fgets和(必要时嵌套)strtok/fprintf@samold谢谢,那么是什么原因没有好的库来做这些非常有用的字符串操作,用C写的呢?也许有——有成千上万的小库,毕竟——但是在哪些字段之间使用哪些分隔符以及使用字符串创建哪些数据结构的配置可能更容易手工编写
      scanf(3)
      在这方面应该是有帮助的,也许我只是在看到很多堆垛机在正确使用它时遇到问题后对它感到厌倦。谢谢你的建议,我将处理相当大的数据集,我不想陷入内存或性能问题,但我想,对我来说,在编写良好的库中使用json应该已经足够好了,而且你会很乐意把XML强加给你的下一个用户吗?不用了,谢谢。JSON还行,对此我不能抱怨太多。:)@sarnold-XML肯定有它的位置——特别是在公司领域,在公司领域,传递一个清晰定义可用和必需字段、数据类型、最大长度等的模式是非常可取的,并且存在成熟的、开发良好的工具链来传输、处理和转换数据。JSON在许多情况下也非常有用——但它本身并不能替代XML。我认为将它们与笼统的语句进行比较是不公平的。@ali——很明显,XML、JSON和company并不总是可以替代自定义二进制格式——特别是当您的产品围绕数据操作进行操作时(如果您正在开发SQL Server,我可能不会建议您使用JSON……尽管mongoDB似乎做得很好)。但让我印象深刻的是,绝大多数人认为他们无法承担“性能开销”一个结构良好且文档化的文件格式标准,如XML或JSON,只需比需要的更早进行优化。一个支持SAX的好的XML解析器通常可以翻阅XML文档。Hrm,
      @sarnold-
      实际上没有通知我新的消息。我建议切换到。你是对的,我对我的笼统状态太油嘴滑舌了但是我以前在尝试查找XML文档中的错误时是盲目的,并且连接了一个完整的SAX解析器来尝试将文档解析为人类可读的内容,这似乎与首先设计人类可读的输入格式相反。