gpt4 book ai didi

c - 如何读取不同格式的行

转载 作者:行者123 更新时间:2023-11-30 15:04:49 25 4
gpt4 key购买 nike

我有一个具有以下形式的输入文件

i 176064 Patterson Denise 8.58 11 DEN 15788 
q 188464
ra 148702 167443
a 73131
d 163464
f 6.00
ct 73131 PHY
b 3
p 15703
pe
m 144626 6.51 8
e

每行中的第一个字符 [i,q,ra,a...] 代表函数的代码,而其余的则是我必须存储到变量中的值,具体取决于该代码。实现这一目标的最佳方法是什么?我一直在考虑使用 fscanf 但每一行没有特定的格式,格式本身取决于代码 [i,q,ra,a,b..]

最佳答案

要读取,请使用fgets()

char buffer[100];
while (fgets, buffer, sizeof buffer, istream) != NULL) {

然后根据各种格式扫描该行,每种格式都以 "%n" 结尾。 "%n" 记录扫描位置(如果到达了那么远)。其他测试可以检查从 n 开始的无关额外字符。

  int num1, num2, num3;
char last[sizeof buf];
char first[sizeof buf];
char code[sizeof buf];
double rate;
int n = 0;
// v..v..v..v...v..v..v spaces optional here
sscanf(buffer, "i %d %s %s %lf %d %s %d %n",
&num1, last, first, &rate, &num2, code, &num3, &n);
if (n) {
Handle_i();
continue;
}
sscanf(buffer, "q %d %n", &num1, &n);
if (n) {
Handle_q();
continue;
}
sscanf(buffer, "ra %d %n", &num1, &num2, &n);
if (n) {
Handle_ra();
continue;
}
sscanf(buffer, "e %n", &n);
if (n) {
Handle_e();
continue;
}
...
fail();
}

由于每种格式都以唯一的字母模式开头,因此 sscanf() 将在不匹配时快速退出。

或者,代码可以解析出首字母以获得稍微更有效的决策树。可疑分析将显示出很小的性能差异。

与任何复杂的格式一样,考虑如何维护代码,它必然会发展。

关于c - 如何读取不同格式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com