Fortran Coder

查看: 18312|回复: 14
打印 上一主题 下一主题

[文件读写] Fortran文件读入问题

[复制链接]

18

帖子

3

主题

0

精华

入门

F 币
85 元
贡献
48 点
跳转到指定楼层
楼主
发表于 2015-10-30 17:34:48 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hipeilei 于 2015-10-30 17:36 编辑

在Fortran下读入一个txt文本文件,VS2013+IVF2013编译可以通过,但一运行出现命令行窗口VS程序就会停止工作,但是在sliverforst Plato下可以运行,我感觉一直是VS的问题,应该不是我的代码的问题,在VS2010上也是一样报错,这就很让人纠结。请大神指点一二,如果你可以正确读入,请麻烦给个指点或者说明。谢谢!以下附上要读入的txt文件。
data.txt (401.29 KB, 下载次数: 17)




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

15#
发表于 2015-10-31 19:21:20 | 只看该作者
我给你的代码里并没有对 mesh_1.txt 的读取。所以你的错误是其他的代码造成的。

18

帖子

3

主题

0

精华

入门

F 币
85 元
贡献
48 点
14#
 楼主| 发表于 2015-10-31 19:17:02 | 只看该作者
fcode 发表于 2015-10-31 19:06
QQ交流的话,请加我我们论坛的QQ群:2338021

版主你好!刚刚你改过的代码我运行了一下,编译链接都可以通过,但是一运行还是会报错:


18

帖子

3

主题

0

精华

入门

F 币
85 元
贡献
48 点
13#
 楼主| 发表于 2015-10-31 19:09:37 | 只看该作者
fcode 发表于 2015-10-31 19:06
QQ交流的话,请加我我们论坛的QQ群:2338021

好的,谢谢版主!

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

12#
发表于 2015-10-31 19:06:50 | 只看该作者
QQ交流的话,请加我我们论坛的QQ群:2338021

18

帖子

3

主题

0

精华

入门

F 币
85 元
贡献
48 点
11#
 楼主| 发表于 2015-10-31 19:04:46 | 只看该作者
fcode 发表于 2015-10-31 15:53
对比你前后的两个代码,你并没有解决问题。而是把代码改得更简单,功能更少,以此“回避”了所有问题。

请 ...

论坛里有大牛存在果然不一样,多谢指点!我其实也是刚接触Fortran不久,大概两周左右,所以水平很低不要见怪,实际上这个程序是做有限元网格映射的,因为涉及到很多数据文件操作,有好几个子程序,所以就没有把代码和数据文件给全,这里要感谢版主这几天来的耐心指点,说实话这几天为这个事情真的是寝食难安,头都大了,奈何能力有限,一直难以有所突破。如果方便,我还有些关于Fortran文件操作的问题想请教版主,我的QQ:913111805,还望版主不吝指点。

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

10#
发表于 2015-10-31 17:04:47 | 只看该作者
pasuka 发表于 2015-10-31 16:24
文件通道直接上newunit吧,这样省心

对。newunit 是个好东西。从刚学fortran我就想这个,因此还自己写过一个 function 叫 GetFreeFileUnit。现在有了 NewUnit ,我就把以前代码里的这个函数都删掉了
[Fortran] 纯文本查看 复制代码
Integer Function GetFreeFileUnit()
  Logical :: bOpen
  Integer :: i
  Do i=11,2**20
    Inquire( i , Opened = bOpen )
    IF ( .Not.bOpen ) Exit
  End Do
  FreeFileUnit = i
End Function GetFreeFileUnit



490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

9#
发表于 2015-10-31 16:24:53 | 只看该作者
fcode 发表于 2015-10-31 15:53
对比你前后的两个代码,你并没有解决问题。而是把代码改得更简单,功能更少,以此“回避”了所有问题。

请 ...

文件通道直接上newunit吧,这样省心

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

8#
发表于 2015-10-31 15:53:03 | 只看该作者
对比你前后的两个代码,你并没有解决问题。而是把代码改得更简单,功能更少,以此“回避”了所有问题。

请看以下代码的注释内容:
[Fortran] 纯文本查看 复制代码
program Mesh_reflection
  implicit none
  integer::i_node,i_element
  integer::n_node1,n_element1!,n_node2 ,n_element2 !//你不需要以 2 结束的变量
  integer,allocatable::ij_element1(:,:)!,ij_element2(:,:)!//同上
  real(8),allocatable::coordinate_n1(:,:)!,coordinate_n2(:,:),stress_1(:,:),stress_2(:,:) !//同上
  open(unit=4,file="data.txt") 
  open(unit=5,file="mdata_new.txt")
  !read(4,*)n_node1,n_element1 // 您的数据文件里并没有 n_node1 , n_element1
  !read(5,*)n_node2,n_element2 // 同上
  n_node1 = 7751 ; n_element1 = 7647 !// 需要赋值
  allocate(ij_element1(n_node1,4),coordinate_n1(n_node1,2))!// 删掉了不需要的变量
  !读入数据.
  do i_node=1,n_node1
    read(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2)
  end do
  do i_element=1,n_element1
    read(4,*)ij_element1(i_element,:)
  end do
  do i_node=1,n_node1 !// n_node2-> n_node1
    write(5,*)coordinate_n1(i_node,:) !// read 改为 write , coordinate_n2 改为 coordinate_n1
  end do
  do i_element=1,n_element1 !// n_element2 -> n_element1
    write(5,*)ij_element1(i_element,:) !// read 改为 write , ij_element2 改为 ij_element1
  enddo
  write(*,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2) !// 4 改为 *
endprogram

其中,第9和第10行,是导致错误的开始。
PS:文件通道号建议10以上,不要用10以下的数字。但为了向你证明不是 Open 语句导致的,所以我没有改动你的文件通道号。

18

帖子

3

主题

0

精华

入门

F 币
85 元
贡献
48 点
7#
 楼主| 发表于 2015-10-31 15:26:04 | 只看该作者
fcode 发表于 2015-10-31 12:19
我想你应该再找找原因。你之前的代码里,都是符合 Open 语句的现今语法的,我认为这不是问题的原因。 ...

这是我之前的代码,我的水平有限,实在找不出来哪里有问题,如果方便劳驾帮我看看,谢谢。
[Fortran] 纯文本查看 复制代码
program Mesh_reflection
implicit none
integer::i_node,i_element
integer::n_node1,n_element1,n_node2,n_element2
integer,allocatable::ij_element1(:,:),ij_element2(:,:)
real(8),allocatable::coordinate_n1(:,:),coordinate_n2(:,:),stress_1(:,:),stress_2(:,:)
open(unit=4,file="data.txt")
open(unit=5,file="mdata_new.txt")
read(4,*)n_node1,n_element1
read(5,*)n_node2,n_element2
allocate(ij_element1(n_node1,4),ij_element2(n_node2,4),coordinate_n1(n_node1,2),coordinate_n2(n_node2,2) ,stress_1(n_node1,4),stress_2(n_node2,4))
!读入数据.
do i_node=1,n_node1
read(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2)
end do
do i_element=1,n_element1
read(4,*)ij_element1(i_element,:)
end do
do i_node=1,n_node2
read(5,*)coordinate_n2(i_node,:)
end do
do i_element=1,n_element2
read(5,*)ij_element2(i_element,:)
enddo
write(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2)
endprogram

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 11:18

Powered by Tencent X3.4

© 2013-2024 Tencent

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