LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 960|回复: 6

读取文件的时候出错什么原因呢?

[复制链接]
发表于 2004-10-21 20:52:54 | 显示全部楼层 |阅读模式
编程读取一个文件中的数据,其中有一部分是如下的格式,按说,我每次读一个记录,每个记录的格式是I7,I6就能把它们都读进去了,因为第一列数有可能是6位和7位
所以用I7,第二列数有可能是6位,所以用了I6.   照理说,两列数之间有只有一个空格就对了,可是当第一列数是6位数时,两列数之间看起来像是隔了两位,而事实上用挪动光标的时候只挪动一位就过去了。  现在的问题是我用I7读6位数的时候总是出错,出错信息如下:
fmt: read unexpected character
apparent state: unit 11 named AL2O3.4
last format: (I7,A1,I5)
lately reading sequential formatted external IO
Program received signal SIGABRT, Aborted.
0xffffe002 in ?? ()
读7位数的时候还能读过去。   为什么看起来是隔了两个数,而实际上是一个?遇到这种情况,该如何读取呢?很着急的说,多谢高手指点!

178000  28
178100  42
178200  42
178300  71
178400  42
178500  57
178600  14
178700  28
 楼主| 发表于 2004-10-21 21:08:05 | 显示全部楼层
高人指点一下阿,我已经尝试了很多方法了,都不行,编译的时候能通过,运行的时候没有把数据读入进去就abort了。。。
发表于 2004-10-21 23:19:02 | 显示全部楼层
"两列数之间看起来像是隔了两位,而事实上用挪动光标的时候只挪动一位就过去了。"
有可能是\t

最好有读入部分的源代码,光从描述里看不出来是什么错误。
 楼主| 发表于 2004-10-22 11:04:25 | 显示全部楼层
读文件的源代码出错部分,read语句中的11是打开文件时的编号,k是要读取的记录个数,这些都没有错,xtmp,ytmp是临时integer变量,xo,yo是real型数组,数组定义,k数值都没有错误。文件前面还有52行的说明部分都已经顺利读出,现在的文件记录指针在53行,问题就出现在这一行的后面部分。
...........do i=1,k
................. read(11,100)xtmp,ytmp
................. xo(i)=1.0*xtmp/10000
...................yo(i)=1.0*ytmp
...........end do
100  format(I7,I7)

读取文件格式
。。。。
。。。。
posit -9990000
pos2t        0
dummy                注:--------52行,循环读取从这一行的下一行开始
200100   166
200200   156
200300   155
200400   174
200500   179
200600   161
200700   181
。。。。。。
。。。。。。
999800   64
999900   65
1000000 53
1000100 51
1000200 57
1000300 54
1000400 68
1000500 67
1000600 57
1000700 68
1000800 58
1000900 42
。。。。。。。。。。。。。
。。。。。。。。。。。。。


望指教!
 楼主| 发表于 2004-10-22 16:44:07 | 显示全部楼层
斑竹说的没错,确实是‘\t’,劳烦问一下,这个问题该如何解决?小弟经验不足的说。
发表于 2004-10-23 05:03:07 | 显示全部楼层
fortran...
 楼主| 发表于 2004-10-24 09:30:26 | 显示全部楼层
最后我用了一个特笨的方法,先把这些数字按字符读入,然后再把他们转化成数字。

我现在编程做科学计算,所以用fortran,界面部分还是准备用perl编写的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表