【问题标题】:Read matrices from multiple .csv files and print matrices in .csv files从多个 .csv 文件中读取矩阵并在 .csv 文件中打印矩阵
【发布时间】:2015-03-15 08:53:44
【问题描述】:

因此,我必须编写一个 C 程序来从多个用户提供给我的 .csv 文件中读取数据,并将数据读取到矩阵中,我将在这些矩阵上执行一些操作(如矩阵加法、与维度上的必要条件相乘等)和再次将这些矩阵(或输出数据)打印到 .csv 文件中。

我还需要为我的矩阵动态分配内存。

现在,我在处理 .csv 文件方面的背景为零。我根本不知道读取 .csv 文件或写入 .csv 文件所需的代码。我在互联网上搜索了很长时间,但令人惊讶的是,我没有找到任何从初级开始教授如何处理 .csv 文件的程序。

我对此一头雾水,需要大量指导,也许是一个示例的、编写良好的 C 程序,因为我需要一个全面的示例开始。

【问题讨论】:

  • CSV 文件使用起来很痛苦——如果你想要逗号怎么办?他们进化以应对这些边缘情况。我认为没有标准的方法来处理它们。您需要知道的很多内容都在名称中:逗号分隔值。使用比 C 提供的(或 C++)更高级的字符串处理方法的语言来解析这些可能会更好。
  • 我可以算出我用谷歌度过了多少个不眠之夜,却没有找到类似的东西。
  • 那么也许你需要更多的睡眠。
  • 没有,我们的教授特别告诉我们,他将为我们提供 csv 文件,我们必须在 C 上运行程序。:( 而且 M Oehm 你的评论不知何故被删除了。结果我失去了链接。能再发一次吗?
  • 我删除了它,因为我在屏幕上看到它后发现它有点太刻薄了。链接是the 4-point question from the sidebar of this page

标签: c csv file-handling


【解决方案1】:

CSV 文件只是一个包含值网格的纯 ASCII 文本文件。将文件视为数据库表中的一组行,其中文件中的每一行代表一条记录,并且每行中数据的顺序相同。每项数据使用逗号字符分隔(因此得名)。所以要读取文件:-

open file
until the end of the file
  read line into a string
  split the string into sub strings where ',' is the dilimiter
  parse each sub string

由于 CSV 文件中没有格式信息,如果每个值中的数据由字符串组成,那么如果值中包含逗号怎么办?用于阅读对您来说不成问题的数字。

您可以分几次读取文件,第一次确定数据量(列数、行数等),第二次实际读取数据。

编写 CSV 非常简单:-

open file
for each record to write
  for each element to write
    write element
    if not last element
      write a comma
   write a new line

【讨论】:

  • 有 CSV 文件的 Internet 标准,RFC 4180“Common Format and MIME Type for Comma-Separated Values (CSV) Files”,然后是 Microsoft 使用的标准(主要是轻度扩展对此,并处理标准所说的一些边缘情况是错误的)。该标准是事后的。然后是其他分隔符的变体,例如制表符,尽管明显用词不当,但它们通常被称为 CSV 文件(DSV - 分隔符分隔值 - 更合适,但不太被广泛认可)。
  • 标准规定了如何处理包含逗号的字段:用双引号将字段值括起来;值中任何嵌入的双引号都会变成两个相邻的双引号。如果字段的开头有双引号,那么您还必须将字段用双引号括起来并将双引号加倍(因此"Hi there", he said, "how are you?" 在 CSV 文件中变为 """Hi there"", he said, ""how are you?""")。
  • @JonathanLeffler:我想我想说的一点是 CSV 文件在定义标准之前就已经存在,而且很多边缘情况(逗号、引号等)都被入侵了规范作为常见的解决方法,并且为这些事情编写解析器的复杂性取决于您想要支持多少(例如,您始终可以将逗号视为分隔符,或者完全忽略整个引号)。总是值得先看看是否有可用的库,然后让其他人来完成这项工作。
猜你喜欢
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2019-02-15
  • 2017-03-20
  • 2022-07-05
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多