c - 从文本文件中读入特定数据(C)

标签 c file-io

我正在尝试从 fmt 格式的变量文件中读取特定数据。所需的数据是abc的值以及fft系数(宽度、高度、深度) 在本例中为 (25,300,300)。

一个示例是从此文件中分配变量: a = 2.467 b = 30.000 c = 30.000 宽度=25 高度=300 深度 = 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

最佳答案

您首先应该指定并形式化实际的file format 您的输入(单个示例是不够的)。至少出于文档目的,您可以使用一些 EBNF符号(我可以猜测,但不确定 BEGINLattice 在其中很重要,但 fmt 维基页面没有提及它们)。

An example would be from this file

这是一个错误的做法。您需要了解您的程序能够处理的通用文件格式,这是软件设计的一部分。所以最好先明确一下。

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

阅读Dragon Book是值得的。

Is there something similar to the python re module in C

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

关于c - 从文本文件中读入特定数据(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45833961/

相关文章:

c - 基本 C 帮助 : Function declarations

c - 以 Row Major 或 Column Major 方式将多维数组存储在内存中有什么区别?

javascript - HTML 和 JavaScript - 如何正确保存纯文本

c++ - 使用 std::filebuf 未反射(reflect)文件大小调整

c# - 访问文件中的备用数据流

c++ - 指针减法和替代方案

c - 嵌套循环比较数组中的整数

c - 如何在gstreamer中录制音频和视频

java - 如何序列化和反序列化 arrayList 对象?

字符数组填充