我的问题的第一部分即使有可能吗?我将先简要介绍一下我的情况。
我的工作拥有执行特定任务的软件许可,但是我们大部分时间都花在将结果中的数据导出到excel等中以执行进一步分析。我想知道是否可以将所有数据转储到C#对象中,以便我可以编写自己的分析代码,这将为我们节省大量时间。
我们许可的软件是用Fortran编写的,但是我们无法访问源代码。该文件看起来像是以二进制文件写出来的,但是我不知道它是否是未格式化/顺序等等(无论如何都要辨别这个?)。
我已经在这个网站上使用了一些其他答案来成功地将数据读入一个字节[],但这是我所拥有的。我试图将部分更改为双打(我假设大部分数据都是这样),但数字并没有让我觉得有意义(大多数看起来太大或太小)。
我有软件的文档,我可以看到大多数内部变量名称是8个字符串,是否会与数据一起保存?如果不是,我认为将所有数据与其相应的变量匹配几乎是不可能的。我想大多数数据都是相同长度的双数组(时间点数),但是也会有一些长度更长的数组,因为有些数据会被内插,需要较短的时间步长才能收敛。 / p>
任何提示或提示都会受到赞赏,或者即使有人告诉我它不可能,所以我不再浪费时间来解决这个问题。
谢谢。
答案 0 :(得分:0)
如果格式化,您应该能够使用文本编辑器阅读它:数字是用纯文本写的。
所以是的,它可能没有格式化。
还有不同的方法。该文件可以具有固定的记录长度,也可以具有变量。
但在我看来,前4个字节表示一个整数,包含该记录的长度(以字节为单位)。例如,在这里我将数字1到10,然后是11到30写入未格式化的文件,文件看起来像这样:
40 1 2 3 4 5 6 7 8 9 10 40
80 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 80
(我添加了新行)在这里,前4个字节代表数字40,接着是10个代表数字1-10的4字节块,接着是另外40个。下一个记录以80开头,并且20个包含数字11到30的4字节块,后跟另外80个。
因此,这可能是您可以尝试看到的模式。读取前4个字节并将它们转换为整数,然后读取那么多字节并将它们转换为您认为应该是的任何字节(4字节浮点数,8字节浮点数等),然后检查接下来的4个字节是否再次表示你先读的数字。
但是还有其他在Fortran中写入数据的方法似乎没有这种行为,例如直接访问和流。所以没有保证。