Fortran:在读取未知大小的文件时如何分配数组?

时间:2016-01-29 05:57:17

标签: arrays fortran dynamic-arrays

我对Fortran的典型使用始于读取未知大小的文件(通常为5-100MB)。我目前的数组分配方法涉及读取文件两次。首先确定问题的大小(分配数组),然后第二次将数据读入这些数组。

是否有更好的尺寸确定/阵列分配方法?我刚刚阅读了另一篇文章中的自动数组分配(例如下面的例子),这似乎更容易。

array = [array,new_data]

所有选项及其优缺点是什么?

2 个答案:

答案 0 :(得分:6)

我会咬人,虽然这个问题正在徘徊在离场外面。您的选择是:

  1. 读取文件一次以获取数组大小,分配,再次读取。
  2. 逐个阅读,(重新)分配。根据您的意愿选择要阅读的作品大小(或者,或许,正如您认为对您的案例来说可能最快)。
  3. 始终,始终使用包含元数据的文件来告诉感兴趣的程序有多少数据;例如一个块 标题行告诉您下一个数据元素的数量 块。
  4. 选项3是迄今为止最好的。在项目开始时需要额外考虑一下,大约一整行代码,以及浪费的时间和精力。您不必跳过HDF5或类似的重量级文件设计方法,只需采用足够的规则来持续文件内容的使用寿命。对于来自宇宙模拟的迭代迭代转储,一个家庭酿造的方法将会做(说实话,你是唯一一个看过它们的人)。对于以每TB大约100万美元的成本(卫星观测,海上地震痕迹,)收集的数据,然后是HDF5或类似的东西。

    选项1也没关系。这不像你必须等待磁带在读取之间回放。 (好吧,有些人会这样做,但是现在他们处于一个利基市场,如果要使用它们,解压缩系统通常会将文件从磁带移动到磁盘。)

    选项2是一个faff。它也可能是表现最差的,但除了最大的文件之外,最糟糕的表现可能在最佳的纳米世纪之内。如果这对你很重要,那就检查一下。

    如果您想要量化我的意见,请在您的硬件上运行您自己的实验。

    PS我还不知道获得1TB卫星或地震数据的成本是多少,这是为支持论证而发明的事实。

答案 1 :(得分:0)

我想补充之前的答案: 如果您的数据具有常规结构并且可以在 txt 文件中打开它,请按 ctrl+end substract header 到行总数,它就在那里。虽然如果它很大,你可能会浪费时间打开它。