【问题标题】:How to save a 2-Dimensional array to a file in C?如何将二维数组保存到 C 中的文件中?
【发布时间】:2013-11-17 02:55:06
【问题描述】:

我是一名初学者 C 程序员,我目前正在做一个项目,以使用 C 实现 viola jones 对象检测算法。我想知道如何将二维数组中的数据存储到一个文件中可以很容易地被不同的程序文件(例如main.c、header_file.h等)移植和访问

提前谢谢你。

【问题讨论】:

  • 此链接可能会有所帮助:stackoverflow.com/questions/17721186 您要查找的内容称为序列化和反序列化。建议的选项之一是 json。我在 PHP 中经常使用 json,发现它非常好用。
  • 你想将它存储为文本还是二进制?
  • 您能告诉我们更多关于您的数据的信息吗?是整数、文本还是对象?
  • 你问错问题了。你应该问的问题是,“如果我要从一个文件初始化一个二维数组,什么格式的文件会让我的工作变得最简单?”一旦你回答了这个问题,你就回答了这个问题。话虽如此,.csv 文件的结构本质上是一个二维数组...
  • 将其存储为文本。格式是您的选择,但我个人会选择 csv。除非您要移植到 ebcdic 平台(我强烈怀疑您是),否则您刚刚解决了 99% 的可移植性问题。

标签: c arrays file-io viola-jones


【解决方案1】:

没有足够的细节来确定你在寻找什么,但你想要做的事情的基本结构看起来像这样:

open file.csv for writing
for(iterate through one dimension of the array using i)
{
for(iterate through the other dimension of the array using j)
   { 
   fprintf(yourfilehandle,"%d,",yourvalue[i][j]);
   }
fprintf(yourfilehandle,"\n");
}
close your file

正如其他人所建议的那样,这将为您留下一个.CSV 文件,这是一个不错的选择,因为它易于读取和解析,您可以在记事本或 Excel 中打开文件并查看它没问题。

这是假设您真的打算使用 C 文件 I/O 来执行此操作,这是一种完全有效的处理方式,有些人只是觉得它有点过时了。

请注意,这会在行尾留下一个多余的逗号。如果这让您感到困扰,那么很容易执行前置和后置条件以仅在您想要的位置获得逗号。提示:它涉及在第二个 for 循环内的条目之前打印逗号,减少您为内部 for 循环迭代的条目数,并在内部 for 之前和之后打印出每行特殊的第一个和最后一个 case循环,分别。可能更难解释。

Here is a reference 用于 C 样式文件 I/O,here is a tutorial

【讨论】:

  • 谢谢你,我会阅读更多。我还计划将它移植到数字信号处理器上,这样 .csv 文件可以正常工作吗?
  • 你的DSP有文件系统吗?你是用C还是汇编编程? DSP 旨在处理信号而不解析文本文件,因此考虑到 DSP 的低级,您可能希望在字节级别定义格式。
  • @alexroussos 对 DSP 板的看法是正确的。我会检查以确保您可以向其中写入文件。我见过一些使用 C 并且确实有文件系统的,所以这不是不可能的,但肯定不能保证。
  • 正在使用的 DSP 是在 cortex A8 处理器上运行的开发板的一部分。该板在 ubuntu 10.04 上运行。使用此设置是否可以处理 CSV 文件?他们会被快速阅读吗?
  • @medz91 如果您可以写入某个已挂载的文件系统,那么是的,这绝对可以。要考虑的另一件事是行尾。我使用的大多数 CSV 文件都有\r\n 行结尾,但这不是必需的。
【解决方案2】:

在不知道要存储什么类型的数据的情况下,我会说将其存储为矩阵。您需要选择一个分隔符来分隔您的元素(制表符或空格是常见的选择,分别是 'tsv' 和 'csv'),然后是用来标记行尾的东西(新行是一个不错的选择) .

所以您保存的文件可能类似于:

10 162 1 5
7 1 4 12
9 2 2 0

您还可以将格式定义为在第一行中包含一些元数据——如果您想预先分配内存,那么行数和列数以及字符编码等其他信息可能会很有用。从简单开始并根据需要添加!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多