主题:关于两个字符变量连接和可分配数组格式化输出问题
有两个问题想向大家请教一下,望能解惑。
(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的字符变量去存字符串,重复上面做法。 感觉这样做好笨,这里只是为了格式化输出一个数组,却要牵扯一大堆不必要的东西。我试着用一个变量只存与数组相应的字符串,并在不同的输出语句中调用,但老报错,编译通不过。不知道有没有好办法?谢谢!
(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的字符变量去存字符串,重复上面做法。 感觉这样做好笨,这里只是为了格式化输出一个数组,却要牵扯一大堆不必要的东西。我试着用一个变量只存与数组相应的字符串,并在不同的输出语句中调用,但老报错,编译通不过。不知道有没有好办法?谢谢!