从文本文件中读取特定数据(C)

时间:2017-08-23 08:01:09

标签: c file-io

我正在尝试从fmt格式的变量文件中读取特定数据。在这种情况下,所需的数据是abc以及fft coefficients (width,height,depth)(25,300,300)的值。

一个例子是从这个文件中分配变量: a = 2.467 b = 30.000 c = 30.000  width = 25  height = 300  depth = 300。 但是,随着输入文件的更改,这些值将发生变化。

目前我能想到的唯一方法就是从文本文件中的位置开始。我不喜欢这样,因为如果文本文件在布局上稍有变化,它很容易出错。任何人都可以建议一个替代方法(有没有类似于C中的python re模块)?

请参阅下面的示例文本文件:

BEGIN header

       Real Lattice(A)               Lattice parameters(A)    Cell Angles
   2.4675850   0.0000000   0.0000000     a =    2.467585  alpha =   90.000000
   0.0000000  30.0000000   0.0000000     b =   30.000000  beta  =   90.000000
   0.0000000   0.0000000  30.0000000     c =   30.000000  gamma =   90.000000

 1                            ! nspins
25   300   300                ! fine FFT grid along <a,b,c>
END header: data is "<a b c> pot" in units of Hartrees

1 个答案:

答案 0 :(得分:1)

您首先指定并正式确定输入的 实际 file format (单个示例是不够的)。您可以使用,至少出于文档目的,使用一些EBNF符号(我可以猜测,但我不确定BEGINLattice是否重要,但fmt wikipage不要提他们。)

  

一个例子来自这个文件

这是一种错误的做法。您需要知道程序能够处理的通用文件格式,这是您的软件设计的一部分。所以最好先指定一下。

然后您将使用通常的parsing技术。另请阅读lexical analysis。也许像parser generator这样的GNU bison可能会有所帮助,或者简单recursive descent parser就足够了。也许你的输入格式关注行,然后你可以逐个阅读它们(例如使用POSIX getline)并解析每一行。

阅读Dragon Book是值得的。

  

是否有与C

中的python re模块类似的东西

POSIX有<regex.h>;见regcomp(3);另请参阅pcre2。我不确定这是否相关。