回 帖 发 新 帖 刷新版面

主题:关于两个字符变量连接和可分配数组格式化输出问题

有两个问题想向大家请教一下,望能解惑。
(1)我做了个测试,想连接两个字符变量的内容,是按彭国伦书上例子做的,用ifort编译,但却没成功,代码如下

        program test
        character(20):: add,appd,outp
        add="good "
        appd="morning"
        outp=add//appd
        write(*,*)  outp
        end program
输出:good
说明只存了add的内容,没有appd的内容,不知道是哪里有问题。另外,如果双斜杠后直接跟引号引起来的字符串不知道合不合语法?

(2)如果我想格式化输出一个可分配数组,假如是一维,但由于个数是变化的,输出格式化时就较麻烦。有一种做法是用一个字符变量去存储格式化信息,在数组输出之前更改相应字符变量内数组大小的相应字符,然后再在write语句中使用这个字符变量作为格式化。问题是,如果一个write语句中格式化信息很多,数组输出只是其中一个部分,那声明变量就变得很麻烦,得存很长一段字符串。举个例子,

          fmt='(1X,F7.2,1X,F7.4,1X,E14.6,1X,E15.6,?(1X,E13.6),1X,I4)'
          WRITE(fmt(36:36),'(I1)') nlat
          WRITE(*,fmt) T, effm, s_m*1000/nlat,f_mag*1000/nlat,(S(i),i=1,nlat), nstep

这还只是一个,当有相同维数的数组在其它地方输出时,由于整条输出组合完全不一样,那又得再用一个类似fmt的字符变量去存字符串,重复上面做法。 感觉这样做好笨,这里只是为了格式化输出一个数组,却要牵扯一大堆不必要的东西。我试着用一个变量只存与数组相应的字符串,并在不同的输出语句中调用,但老报错,编译通不过。不知道有没有好办法?谢谢!

回复列表 (共2个回复)

沙发

1. 因为add是20个字节的变量, 当add='good'的时候, 他的分配形式是add: "good___..."后面16个空格. 注意,空格也是字符. 所以outp=add//appd, outp也只是20个字符变量, 把add填进去已经饱了, appd就没有空间了. 可以修改成:
outp = TRIM(add) // TRIM(appd)  !我应该没有记错trim是去掉后面空格的函数吧.

2. 如果输出格式规律性不是很强的话确实是很麻烦的. 修改了1之后你的想法是否可以进一步完善? 这方面我没有什么好办法, 看看其他人有没有意见提供吧.

板凳

我凌乱了。搞定啊,把第一个问题解决后,用到第二个问题,No problem. 再次感激!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册