nsnmb 发表于 2008-10-29 06:49:05

fortran如何读入文本文件中的某行的指定部分

例如这样一个文件:
1 2 3 4 5 u 1
2 3 6 5 x 55 2
2 3 6 9 5 45
如果只想读入其中第三列,也就是第三个空格(backspace)处的数字,如何实现呢? 谢谢!!!

zhoulon 发表于 2008-10-29 08:11:24

说明:我不知道你的文件里面的具体格式,所以只能用格式语句100来表示了,具体自己弄吧。我下面这个程序是把文件里面的所有数据都读取出来,然后用了一个do循环,将你要的第三列数据赋值给了b数组,不知道是不是你想要的。

implicit real*8 (a-h,o-z)
dimension a(3,7),b(3,1)

open (1,file='shuju.dat',form='formatted',status='unknown')
do i=1,3
   read (1,100) (a(i,j),j=1,7)
end do
close (1)

do i=1,3
   b(i,1)=a(i,3)
end do

end

[ 本帖最后由 zhoulon 于 2008-10-30 18:53 编辑 ]

nsnmb 发表于 2008-10-29 15:22:12

回复 2# zhoulon 的帖子

多谢,很有帮助的,我的目的基本也差不多,呵呵。

我记得很久以前有这样一个程序:可以用do来把一个文件的 指定部分读出来,这个指定部分指的是: 比如打开一个记事本,光标肯定在最左上角闪烁,如果敲空格键,则光标就往左边移动了,当然了,敲几下空格,光标就往右边移动多少个位置, fortran是否可以把一个txt文件逐行读入,并且是只读入每行的第3个位置到第七个位置之间的数据,或者是读入全部的数据,但是在把这些txt文件中包含的数据写出去的时候,只写每行的第3个位置到第七个位置之间的数据。 您看这样能实现不? 我只能把它读成字符的形式。但是对于这样的还不会,还请您多指教啊!!

zhoulon 发表于 2008-10-29 15:44:51

你看这样行不行,下面这段程序也可以实现我上面编制的程序的功能的,呵呵。其实说白了,编制程序关键在于自己的想法以及尝试如何编制程序来实现。至于你说的第三个位置到第七个位置的数据,只要将格式行100中的format语句改变一下就可以实现了,不信你就试试。

implicit real*8 (a-h,o-z)
dimension a(3,5),b(3,2)

open (1,file='shuju.dat',form='formatted',status='unknown')
do i=1,3
   read (1,100) (b(i,j),j=1,2),(a(i,j),j=1,5),
end do
close (1)

end

[ 本帖最后由 zhoulon 于 2008-10-30 18:50 编辑 ]

nsnmb 发表于 2008-10-30 09:06:43

回复 4# zhoulon 的帖子

多谢多谢,根据您的指示,呵呵,搞定了!!
对于那个100的格式有什么讲究 啊?有没有什么资料或者程序可参考?

zhoulon 发表于 2008-10-30 11:34:49

原帖由 nsnmb 于 2008-10-30 09:06 发表 http://forum.simwe.com/images/common/back.gif
对于那个100的格式有什么讲究 啊?有没有什么资料或者程序可参考?
这个关键是自己的习惯,没有什么讲究,你着一本fortran教材,上面关于输入输出格式都是讲解的,我们论坛上面就有,你可以找一下。

nsnmb 发表于 2008-10-30 17:03:36

回复 6# zhoulon 的帖子

如果只读入一行该怎么搞呢? 多谢多谢!!!

zhoulon 发表于 2008-10-30 18:33:41


implicit real*8 (a-h,o-z)
dimension a(3,5),b(3,2)

open (1,file='shuju.dat',form='formatted',status='unknown')
do i=1,1
   read (1,100) (b(i,j),j=1,2),(a(i,j),j=1,5),
end do
close (1)

end

同志你搞没有搞错,看来你的数组等一些语法没有学习好呀,还是好人做到底吧,你看看满不满意,呵呵。

[ 本帖最后由 zhoulon 于 2008-10-30 18:49 编辑 ]

nsnmb 发表于 2008-10-30 21:17:57

回复 8# zhoulon 的帖子

嘿嘿,不好意思,我表达错了,不好意思。但是非常感谢啊。
是这样的,我的这组数据读进来已经没有问题了,但是我想实现的是这样的功能:
比如上面我列出的数据,希望程序能 逐行读入,例如在读完第一行后(里面有7个元素),把这七个元素放入一个向量里面(是一个1x7的向量,姑且称为a),然后再去另外一个文件b中查找和这个a中的第一个元素一摸一样的数据,如果二者相等,则把b文件中包含和a的第一个元素相等的这一行取出来赋给一个变量c1。这个赋值过程结束以后,同样a的第二个元素进行同样的操作c2,再对第三个c3。就可以计算出这样这三个做完以后,再读上面文件的第二行,同样的操作重复一遍,直到最后。
数据结构大概是怎样的:
原始数据(上面我列的那个文件)的格式是这样的:
1 101 102 103
2201 202 203
3301 302 303
。。。。。
b文件是怎样的:
101 0.2 0.3 0.2
301 0.3 -0.1 0.3
103 2.3 6.5 0.3
201 3.2 0.2 1.2
。。。。
规律是原始文件(第一个文件)的 2 3 4列必然包含再b文件的第一列里面
其实,原始文件是单元和单元包含的节点,b文件是节点及其坐标。
这几天一直再想单元和节点的这个映射关系,觉得应该是这样逐个单元处理,因为有了c1 c2 c3,就可以计算出该单元的面积,该单元到任意一个点的距离等等。
对这样的问题,有没有好的建议啊? 多谢多谢。

zhoulon 发表于 2008-10-31 08:21:40

我个人建议你将a文件和b文件分别读取出来,然后逐个来进行比较,最后赋值给c就可以了吗,这个很简单吗,这里就不用程序来演示了,呵呵。说句实在话,数据处理是件比较麻烦的事情,关键是你要实现什么样的功能,然后利用你的思想来实现这个功能就可以了。

[ 本帖最后由 zhoulon 于 2008-10-31 08:23 编辑 ]

nsnmb 发表于 2008-10-31 12:58:32

回复 10# zhoulon 的帖子

兄弟,我运行您的第一个程序,
program test
implicit real*8 (a-h,o-z)
dimension a(3,7),b(3,1)

open (1,file='shuju.txt',status='unknown')
doi=1,3
   read (1,*) (a(i,j),j=1,7)
end do
close (1)
end
提示说 list-directed I/O syntax error, unit 1,
我把格式100该为×,不行啊,换成100,说是未定义。怎么回事啊? 定义
谢谢啊

[ 本帖最后由 nsnmb 于 2008-10-31 13:35 编辑 ]

zhoulon 发表于 2008-10-31 13:37:10

原帖由 zhoulon 于 2008-10-29 08:11 发表 http://forum.simwe.com/images/common/back.gif
说明:我不知道你的文件里面的具体格式,所以只能用格式语句100来表示了,具体自己弄吧。
你看看我的这句话,我不是都说了吗,这取决于你的文件中数据的具体格式。文件不是你写的吗,你应该知道格式吧;即使不是你写的,你多试几个格式不就知道了,难道是要我给你弄出来呀,我也有工作什么的吧。说白了,到这里做版主回答问题,就是凭着自己的一份热情和激情;上论坛提问题,能够得到提示就不错了,还要每一个问题别人都给你弄出来是不是?所以说,好多东西还是要自己实践,自己弄的不是,况且你的这个问题根本就没有什么难度;如果难度比较大的问题,我肯定会尽全力帮助你的,呵呵。你问问题得到回答以后,根本就没有好好看我给你的解答说明,如果我没有说错的话,你应该直接把我放上来的程序拷贝下去就自己用了,唉!还是多说几句吧,具体到100语句没有定义,是当然的了,你看我的程序里面哪里有100行,这个不是让你根据你的数据自己来定义的吗?看来你的fortran基本功不太牢靠呀。

[ 本帖最后由 zhoulon 于 2008-10-31 13:40 编辑 ]

nsnmb 发表于 2008-10-31 14:59:23

回复 12# zhoulon 的帖子

呵呵,还是谢谢你。
我想对于计算机语言,有经验的人肯定有这样的感触:一个非常小的问题,可是对于一个刚开始用这门语言的人来说,就是过不去,虽说也没有什么奥妙可言,但是就是那个槛,就是过不去。这样的简单问题,如果身边有用fotran的人的话,也不会放到论坛上请教了。呵呵。
还是非常感谢你给了那么多的帮助,因为我是本周一才开始用fortran的。

谢谢。

zhoulon 发表于 2008-11-1 20:49:02

回复 13# nsnmb 的帖子

呵呵,nsnmb你可能误解我了,我不是烦你提问题,关键是我在上面回答你的帖子里面把好多东西都交代清楚了,感觉你没有好好看我的帖子、我给你的提示说明,而感到有点不太得劲。如果有什么得罪的地方,还望担待,呵呵,欢迎常来交流。

nsnmb 发表于 2008-11-4 13:52:33

回复 14# zhoulon 的帖子

斑竹,我已经搞定了,HOHO!!
感觉写程序太容易失眠了,想不通连觉都睡不成,hehe
多谢斑竹啊,给了这么多的建议,现在回头看这个问题,您真的是已经交代的很清楚了,可惜我没有看懂,不好意思,汗 啊:funk:

wlk1978 发表于 2009-1-9 14:40:42

哈哈,多找点书看看,不是难点

千里马1898 发表于 2009-11-9 20:22:53

其实这个读入程序的关键在于自己的数据格式一定要在format中准确地表达,不然的话很难通过运行

dongjinggang 发表于 2011-2-27 09:07:10

请问如果是1 2 3这种形式的数据,想写成1这种形式的数据怎么编程 啊
               4 5 6                                       2
               7 8 9                                       3
                                                                4
                                                                5
                                                                6
                                                                …
页: [1]
查看完整版本: fortran如何读入文本文件中的某行的指定部分