gpt4 book ai didi

c - 使用 sscanf 解析文本文件的整数和浮点值

转载 作者:太空狗 更新时间:2023-10-29 16:12:56 25 4
gpt4 key购买 nike

我想将具有这些字段的此类文件解析为整数和浮点变量,我尝试使用 fscanf、strtok、sscanf 来执行此操作。但是它们都不起作用!

文件的一些行:

fed18 5.7 12.7 144997 8087 267345 100776
fedora18 24.9 25.3 253566 10501 126282 118157
fed18 5.9 12.7 145005 8094 267345 100785
fedora18 23.3 25.3 253576 10507 126282 118169
fed18 6.2 12.7 145013 8100 267345 100789

运行以下代码会返回错误的值!我在搜索时不知道是什么问题,每个人都使用这样的代码并且它对他们来说工作正常!

 while(fgets(str,512,fp)!= NULL)//read file line by line
{
char *tokenstring = str;
uint64_t netrx,nettx,vbd_rd,vbd_wr;
double cpu, mem;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];
sscanf(tokenstring, "%s ,%[^' '],%[^' '],%[^' '],%[^' '],%[^' '],%[^' ']",g, a, b, c, d, e, f);
cpu = atof(a);
mem = atof(b);
nettx = atoi(c);
netrx = atoi(d);
vbd_rd = atoi(e);
vbd_wr = atoi(f);
printf("%s %f %f %ld %ld %ld %ld\n",g,cpu,mem,netrx,nettx,vbd_rd,vbd_wr);
}
fclose(fp);

这是输出:

fed18 38.000000 1.000000 0 0 0 0
fedora18 38.000000 1.000000 0 0 0 0
fed18 38.000000 1.000000 0 0 0 0
fedora18 38.000000 1.000000 0 0 0 0
fed18 38.000000 1.000000 0 0 0 0

我使用 bash 脚本和 awk 编辑了原始文本文件,....原始行采用这种格式:

     fed18 --b---       3616    6.3    1052640   12.7    1052672      12.7     3    1   125864     6023    1        0   254349    93082    7412662    4730752    0
fedora18 --b--- 4711 2.4 2101216 25.3 2101248 25.3 3 1 249151 8636 1 0 126083 113505 3306934 5992656 0

我使用 bash 脚本选择了一些列。也许这导致了问题!

我评论了使用函数 atoiatof 的行,但仍然输出错误的值。

最佳答案

如果您总是希望参数之间有一个空格,您可以简单地设置格式字符串并避免使用 atoiatof:

while(fgets(str,512,fp)!= NULL)//read file line by line
{
char *tokenstring = str;
uint64_t netrx,nettx,vbd_rd,vbd_wr;
char g[10];
double cpu, mem;
long int c, d, e, f;
sscanf(tokenstring, "%s %lf %lf %lu %lu %lu %lu", g, &cpu, &mem, &nettx, &netrx, &vbd_rd, &vbd_wr);
printf("%s %f %f %ld %ld %ld %ld\n",g,cpu,mem,netrx,nettx,vbd_rd,vbd_wr);
}
fclose(fp);

关于c - 使用 sscanf 解析文本文件的整数和浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712774/

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