我正在尝试从fmt格式的变量文件中读取特定数据。在这种情况下,所需的数据是a
,b
和c
以及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
答案 0 :(得分:1)
您首先指定并正式确定输入的 实际 file format (单个示例是不够的)。您可以使用,至少出于文档目的,使用一些EBNF符号(我可以猜测,但我不确定BEGIN
和Lattice
是否重要,但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。我不确定这是否相关。