开颜儿 发表于 2014-5-22 21:08:36

复数数据读取

PROGRAM FMMM
IMPLICIT NONE
INTEGER I,J,K,ERROR,BBB,B,AA,BB
REAL P0(360000),P1(360000),P2(360000),P3(360000),P4(360000),P5(360000),P6(360000),LEG0(5000,72),LEG1(5000,72),LEG2(5000,72),LEG3(5000,72),LEG4(5000,72),LEG5(5000,72),LEG6(5000,72)
COMPLEX HANKEL0(5000),HANKEL1(5000),H(7,5000),HH(7,5000)
   OPEN(UNIT=30,FILE="HHKR_0.TXT")
   READ(30,*) HANKEL0
   OPEN(UNIT=66,FILE="P0.TXT")
   READ(66,*) P0
   OPEN(UNIT=68,FILE="P1.TXT")
   READ(68,*) P1
   OPEN(UNIT=70,FILE="P2.TXT")
   READ(70,*) P2
   OPEN(UNIT=72,FILE="P3.TXT")
   READ(72,*) P3
   OPEN(UNIT=76,FILE="P4.TXT")
   READ(76,*) P4
   OPEN(UNIT=78,FILE="P5.TXT")
   READ(78,*) P5
   OPEN(UNIT=82,FILE="P6.TXT")
   READ(82,*) P6
   DO AA=1,5000
       DO BB=1,72
         LEG0(AA,BB)=P0(BB+(AA-1)*72)
         LEG1(AA,BB)=P1(BB+(AA-1)*72)
         LEG2(AA,BB)=P2(BB+(AA-1)*72)
         LEG3(AA,BB)=P3(BB+(AA-1)*72)
         LEG4(AA,BB)=P4(BB+(AA-1)*72)
         LEG5(AA,BB)=P5(BB+(AA-1)*72)
         LEG6(AA,BB)=P6(BB+(AA-1)*72)
       ENDDO
   ENDDO
   OPEN(UNIT=90,FILE="L6.TXT")
   WRITE(90,*) LEG6
PAUSE
STOP   
END


求助,之前同样做的文件数据较少时可以顺利执行。现在TXT文件有5000个复数数据就读不出来了~~
图片是文件的数据格式


开颜儿 发表于 2014-5-22 21:10:45

程序可以执行。就是在READ那里出现,断点,黑框闪退

fcode 发表于 2014-5-22 21:21:06

你需要使用格式读取 ,* 读取是肯定不行的。

我就不知道为啥你数据少的时候可以,我觉得1个数据你也读不出来。

开颜儿 发表于 2014-5-22 21:25:11

fcode 发表于 2014-5-22 21:21
你需要使用格式读取 ,* 读取是肯定不行的。

我就不知道为啥你数据少的时候可以,我觉得1个数据你也读不出 ...

我用   READ(30,"(F18.17,F18.17)") HANKEL   也不行啊

vvt 发表于 2014-5-23 01:38:27

开颜儿 发表于 2014-5-22 21:25
我用   READ(30,"(F18.17,F18.17)") HANKEL   也不行啊

当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是
real :: ra , rb
character(len=1) :: sign
read( 30 , "(f17.15,1x,a1,1x,f17.15)" ) ra , sign , rb
if(sign=='-') rb = 0 - rb
hankel = cmplx(ra,rb)
这样才对。如果你的数据里,实部是负数,你还需要结合实际情况进行考虑。

所以你的数据格式是很变态的。

另外,求助时,该截图,还是该复制粘贴,这很有技巧,要考虑回答人的感受。比如数据,你就应该复制粘贴,而不是截图。你知道其他人一个一个数数字的位数,多难受么?

更完善的读取方法请参考:
http://fcode.cn/bbs/thread-167-1-2.html

aliouying 发表于 2014-5-23 14:16:07

你这hankel系数有点多吧,而且居然是复数?

开颜儿 发表于 2014-5-23 14:30:42

vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是


谢谢啦~我试试 不好意思,第一次发帖不懂,见谅

开颜儿 发表于 2014-5-23 14:31:18

aliouying 发表于 2014-5-23 14:16
你这hankel系数有点多吧,而且居然是复数?

恩,5000个复数,我也在考虑是不是数据量太大

开颜儿 发表于 2014-5-23 14:35:22

vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是


还想请教一下。实部有复数也得IF考虑一下符号吗

开颜儿 发表于 2014-5-23 15:39:40

vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是


你好,我试了一下您帮助我的代码,但是只读进去第一行额,请问我是哪里还不对吗
+,-号问题可以这样吗read(30,"(a1,f17.15,1x,a1,1x,f17.15)" )sign1, ra , sign , rb
if(sign=='-') rb = 0 - rb
if(sign1=='-') ra = 0 - ra
页: [1] 2
查看完整版本: 复数数据读取