24小时热门版块排行榜    

CyRhmU.jpeg
查看: 10746  |  回复: 157
本帖产生 1 个 程序强帖 ,点击这里进行查看

idgnauh

银虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
jjdg:欢迎交流 2010-04-06 02:51
Fortran写入的文件怎样进行更改呀?
比如说我想在一个文件的开头说明该文件的数据的个数,而个数是不确定的,需要在执行程序后,在开头写入这个个数。我是了几种方法,比如通过rewind来返回文件头,可是这样整个文件后面存储的数据都被EOF了,不知道该怎么处理。希望各位大牛们能够帮帮我,在这先谢过啦。
81楼2010-04-05 09:00:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

asiahu

银虫 (初入文坛)


小木虫(金币+0.5):给个红包,谢谢回帖交流
jjdg:感谢交流 2010-04-06 02:51
作为初学者,对Fortran的感觉是它很强大,但又有一种畏惧学不懂的感觉,期待楼主的资源

[ Last edited by jjdg on 2010-4-6 at 02:50 ]
路曼曼其修远兮,吾将上下而求索
82楼2010-04-05 23:50:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

figgers

铜虫 (初入文坛)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2):谢谢参与应助! 2010-04-10 16:22
引用回帖:
Originally posted by idgnauh at 2010-04-05 09:00:43:
Fortran写入的文件怎样进行更改呀?
比如说我想在一个文件的开头说明该文件的数据的个数,而个数是不确定的,需要在执行程序后,在开头写入这个个数。我是了几种方法,比如通过rewind来返回文件头,可是这样整个文 ...

我遇到过类似问题,好在我的输出数据行数就在几千行,不算多。
我用的是最笨的办法:

写好你要的文件1
......
close(1)

然后开另一个文件2
写开头
重新打开文件1
逐行copy文件1的内容到文件2
read....
write..
close(1)
close(2)

几千行的文件(1行几百个char吧),速度还可以。
可能应该有更好的办法吧

[ Last edited by figgers on 2010-4-10 at 13:23 ]
83楼2010-04-10 13:21:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

figgers

铜虫 (初入文坛)

引用回帖:
Originally posted by lnba at 2010-01-14 07:26:36:
fortran里面的整型变量最大只能定义为integer*4,也就是2^31吗?有没有可能定义更大的整型变量?我用integer*8它总是报错...

这个跟编译器有关吧,ivf11.1就支持integer(kind=8)类型的, cvf就不支持.
84楼2010-04-10 13:26:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

idgnauh

银虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by figgers at 2010-04-10 13:21:40:



我遇到过类似问题,好在我的输出数据行数就在几千行,不算多。
我用的是最笨的办法:

写好你要的文件1
......
close(1)

然后开另一个文件2
写开头
重新打开文件1
逐行copy文件1的内容到文件2
r ...

和figgers想到一块去啦,我最后一是这么弄的。Fortran要是有把文件拼起来的函数就好了。
85楼2010-04-10 14:44:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)

怎样把一组数存入数组??


小木虫(金币+0.5):给个红包,谢谢回帖交流
您好,我想请教一个问题,
1       15733
1       18193
1       20251
2       15733
2       20251
3       20824
4       15733
4       16159
4       18193
4       20251
4       20824
5       16159
5       18193
5       20251
5       20824
6       15733
6       20251
6       20824
7       15733
7       20251
7       20824
8       15733
8       16159
8       18193
8       20251
9       18193
9       20251
10        9490
10       16159
10       20251
(1)上面数据存在aaa.txt文件中。对于上面的数据,第二列是步数(step),第三列是每步的可能取值。我想将这些数据读入,并保存在数组H(io,istep)中。io可以取从1到30000但是只有当io取文件中第二列对应的值时H(io,istep)=1,取其他值均为0.也就是说当step=1时,io取15733,18193,20251时H的值为1,取其他值都为0,当step=2时,io取15733,20251时H的值为1,取其他值都为0。我应该怎样实现呢,我想了好久还是没想出来。期待专家的解答。先谢谢了。
86楼2010-12-02 04:59:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★
余泽成(金币+3):辛苦了! 2010-12-06 16:32:08
引用回帖:
Originally posted by astringent at 2010-12-02 04:59:14:
您好,我想请教一个问题,
1       15733
1       18193
1       20251
2       15733
2       20251
3       20824
4       15733
4       16159
4       18193
4       20251
4       20824
5      ...

你要表达的意思我基本上明白了,但是有一个疑问哈,呵呵,
如果按照你的意思,那么H[io,istep]将会是一个稀疏的大的矩阵,没多大意思吧?你是不是想表述成这个意思的呀?

我举个例子:下面有两列数:

1  12
1  13
2  14
2  15
2  16
3  17

你是不是想把上述两列数据存储到方阵 H(io,istep)中:


H[io, istep]    1      2      3  [istep]

        1     12    14     17
  
            2     13     15     0

            3      0      16     0

istep共有 3个,istep中,第二个istep的io 最多为三个,所以行数取为 3。
其余不够的用零来补充。

是不是这个意思? 还是非要按照你原来的意思写???
87楼2010-12-02 09:09:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★
余泽成(金币+5):谢谢参与应助! 2010-12-06 16:32:26
引用回帖:
Originally posted by astringent at 2010-12-02 04:59:14:
您好,我想请教一个问题,
1       15733
1       18193
1       20251
2       15733
2       20251
3       20824
4       15733
4       16159
4       18193
4       20251
4       20824
5      ...

依据我的理解,写了一个简单的示范程序,可以参考一下,我没有按照你的意思来写,我感觉你或许说的有点问题,呵呵,


      Implicit None
      Integer Max_Parameter,Max_step
      Parameter(Max_Parameter=20,Max_step=20)
      Integer H(Max_Parameter,Max_step)
c        Allocatable H(:,
      Character(Len=60) FileName
        Integer Ihere,Istep,Io,Ibegin
       
c        Write(*,*) 'Please input name of the input files'
       
c        Read(*,*) FileName

c        Open(10,File=Trim(FileName)//'.txt',Status='OlD')
      Open(10,File='aaa.txt',Status='OlD')
      
      Read(10,*) Ihere
      Ibegin=0
      Rewind(10)
14        Read(10,*,End=123) Istep,Io

      If(Istep.eq.Ihere) Then
           Ibegin=Ibegin+1
         H(Ibegin,Istep)=Io
      Else
        Ibegin=1
          Ihere=Istep
          H(Ibegin,Istep)=Io
      EndIF  
      Goto 14
123   Continue
      write(*,*) H(1,1), H(1,2), H(1,3), H(1,4), H(1,5), H(1,6)
        write(*,*) H(2,1), H(2,2), H(2,3), H(2,4), H(2,5), H(2,6)
        write(*,*) H(3,1), H(3,2), H(3,3), H(3,4), H(3,5), H(3,6)
        write(*,*) H(4,1), H(4,2), H(4,3), H(4,4), H(4,5), H(4,6)
        write(*,*) H(5,1), H(5,2), H(5,3), H(5,4), H(5,5), H(5,6)
        End









[ Last edited by maomao1210 on 2010-12-2 at 09:45 ]
88楼2010-12-02 09:42:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★
余泽成(金币+3):辛苦了! 2010-12-06 16:35:03
引用回帖:
Originally posted by astringent at 2010-12-02 04:59:14:
您好,我想请教一个问题,
1       15733
1       18193
1       20251
2       15733
2       20251
3       20824
4       15733
4       16159
4       18193
4       20251
4       20824
5      ...

如果我理解错了,你打算严格按照你的意思来写的话,那你可以参考 ‘piduil‘虫子给写的f90示范程序,简单也很实用





counter (istep) : 代表 第istep 步的 Io 的个数

test(counter(istep),istep) :代表 第istep 步中,第counter(istep)中存的 Io 值。

H(test(counter(istep),istep))  : 就是你要求的东西了。


看懂这个程序,切记起 索引数组的用法和含义。

[ Last edited by maomao1210 on 2010-12-2 at 10:00 ]
89楼2010-12-02 09:52:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by maomao1210 at 2010-12-02 09:42:43:

依据我的理解,写了一个简单的示范程序,可以参考一下,我没有按照你的意思来写,我感觉你或许说的有点问题,呵呵,


      Implicit None
      Integer Max_Parameter,Max_step
      Parameter(Max_Pa ...

太感谢maomao1210的解答了,按照你的方法,我在后面引用数组的时候更方便了。真不愧是专家,多谢。
90楼2010-12-03 03:04:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 maomao1210 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见