主题:读取文件时,能否指定读写位置倒退的行数?
大智若愚
[专家分:90] 发布于 2010-09-02 12:00:00
大家好!
读取文件的时候,如果读到某位置时,这个位置之前的某些数据有用,此时想再倒退到有用的数据行,重新读取数据,碰到这种情况,应该怎么办?
我本来想用backspace,但是只能退回一步,难道要用循环让backspace一直倒退吗?或者有其他方法可以指定倒退的行数。请指点一下,谢谢!
最后更新于:2010-09-02 14:27:00
回复列表 (共9个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-09-02 13:32:00
没有。
板凳
大智若愚 [专家分:90] 发布于 2010-09-02 14:07:00
那就只能用循环backspace退回去?
3 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 14:12:00
为什么要倒退多行呢?没其他方法解决吗?不妨把你要实现的功能说来听听。一个简单的方法就是读两遍文件,第一遍解析文件,第二遍提取你需要的东西。
4 楼
大智若愚 [专家分:90] 发布于 2010-09-02 14:33:00
还是昨天的数据文件。
我上传了一个图片,方框里面的数据是,节点的x方向,y方向,z方向的坐标。
因为节点的xyz数据之前没有提示字符,之后才有“Initial Conditions; Time 0.00 (s)”提示字符。所以我就想退回去,先输出节点xyz方向数据,然后再读取其他数据。
5 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 14:49:00
[quote]还是昨天的数据文件。
我上传了一个图片,方框里面的数据是,节点的x方向,y方向,z方向的坐标。
因为节点的xyz数据之前没有提示字符,之后才有“Initial Conditions; Time 0.00 (s)”提示字符。所以我就想退回去,先输出节点xyz方向数据,然后再读取其他数据。
[/quote]
“Initial Conditions; Time 0.00 (s)” 之前多少行可以算出来吗?
6 楼
大智若愚 [专家分:90] 发布于 2010-09-02 14:52:00
嗯,可以算出来。根据列数和xyz点数,就可以算出来节点数据占用的行数。
7 楼
大智若愚 [专家分:90] 发布于 2010-09-02 14:55:00
今天想了一下,想把后处理程序做的好一些,直接输出tecplot能用的数据,所以就想这样做。
8 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 15:07:00
[quote]嗯,可以算出来。根据列数和xyz点数,就可以算出来节点数据占用的行数。[/quote]
那简单了,用一个字符串数组str(N+1)就可以了,为避免占用过多内存,数组维数比节点数据占用的行数N(N+1)稍大即可!
读数据,str(1),str(2)...,边读边判断str是否包含“Initial Conditions;”当循环完N+1,把str(1)覆盖,然后str(2)覆盖...!直到找到“Initial Conditions;”为止,需要的数据就在前面的数组里面。
9 楼
大智若愚 [专家分:90] 发布于 2010-09-02 15:32:00
嗯,我明白了。
我本来想一步到位输出数据文件的,看了下您的方法,觉得还是分成两个步骤好做一些。谢谢!
我来回复