c语言关于解析字段文本,C语言阅读专栏文本文件

首先让我问你的原谅,如果这太琐碎了,我不是C开发人员,通常我在Fortran编程。C语言阅读专栏文本文件

我需要阅读一些专栏文本文件。我遇到的问题是一些列可以有空格(非填充值)或不完全填写的字段。

让我用一个简短的问题例子。比方说,我有一个生成器程序,如:

#include

#include

int main(){

printf("xxxx%4d%4.2f\n",99,3.14);

}

当我执行这个节目,我得到:

$ ./t1

xxxx 993.14

如果我把它变成一个文本文件,并尝试使用(例如)sscanf的与阅读代码:

#include

#include

int main() {

char *fmt = "%*4c%4d%4f";

char *line = "xxxx 993.14";

int ival;

float fval;

sscanf(line,fmt,&ival,&fval);

printf(">>>>%d|%f\n",ival,fval);

}

结果是:

$ ./t2

>>>>993|0.140000

这里有什么问题? sscanf似乎认为所有空间都是毫无意义的,应该丢弃。因此,“%4c”完成了它的功能,它计算4个字符而不会丢弃任何空格,并丢弃由于“”而导致的所有内容。接下来,%4d开始跳过所有空格,并在找到转换的第一个有效字符时开始计算字段的4个字符。所以99的值就是993,3.14的值是0.14。

在Fortran中读取代码将是:

program t3

implicit none

integer :: ival

real :: fval

character(len=30) :: fmt="(4x,i4,f4.0)"

character(len=30) :: line="xxxx 993.14"

read(line,fmt) ival, fval

write(*,"('>>>>',i4,'|',f4.2)") ival,fval

end program t3

,结果将是:

$ ./t3

>>>> 99|3.14

也就是说,格式规范状态字段宽度,并没有什么在转换丢弃,除了如果按照“nX”规范指示。

一些最后发言,以帮助助手:

要读取的格式是国际标准并没有改变它 方式。

现有文件的数量是要考虑干预或 格式更改。

它不是CSV或类似的格式。

该代码必须在C中,以便集成到免费软件包中。

对不起,太长了,试图尽可能完整地说明问题。

问题是:有没有办法告诉sscanf不要跳过空格?如果没有,是否有一个简单的方法在C中完成它,或者有必要为每个记录类型编写一个专门的解析器?

预先感谢您。

2016-01-06

Roxo

+0

您在使用strtok的考虑()? –

+0

是的,我考虑过了。根据手册,它是一个将字符串分解为零或多个非空令牌序列的函数。问题是文件的每一行都有一个(〜10)列字段,并不是所有的字段都被保证填写,字段之间没有分隔符。我需要读取每一行,并根据它们的长度和种类(int,float或double)提取所需的字段。空白字段必须读为零。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值