我正在尝试在Fortran 90中的程序中将整数转换为字符。 这是我的代码:
Write(Array(i,j),'(I5)') Myarray(i,j)
Array
是一个整数数组,Myarray
是一个字符数组,'(I5)'
,我不知道它是什么,只是为我之前工作过!
错误是:
"单位既没有打开也没有预先连接"
有时候
"格式/数据不匹配"!
答案 0 :(得分:3)
'(I5)'
是write语句的格式说明符:将值写为integer
,总共有五个字符。
有些事情可能会出错:
Myarray
确实是一个整数(而不是real
)array
是一个字符数组,每个元素的长度至少为五个字符 i
和j
保留有效值这是一个有效的例子:
program test
implicit none
character(len=5) :: array(2,2)
integer,parameter :: myArray(2,2) = reshape([1, 2, 3, 4], [2, 2])
integer :: i, j
do j=1,size(myArray,2)
do i=1,size(myArray,1)
write(array(i,j), '(I5)' ) myArray(i,j)
enddo !i
enddo !j
print *, myArray(1,:)
print *, myArray(2,:)
print *,'--'
print *, array(1,:)
print *, array(2,:)
end program
答案 1 :(得分:2)
Alexander Vogt explains (I5)
部分的含义。该答案还指出了其他一些问题,并解决了主要问题。它没有明确说明解决方案,所以我会在这里写一下。
您有两个错误,但两者都有相同的原因。我将重新声明你的写声明,明确说明隐含的东西。
Write(unit=Array(i,j),'(I5)') Myarray(i,j)
隐含的东西是unit=
。然后,您要求将字符变量Myarray(i,j)
写入连接到整数变量Array(i,j)
给定的单位的文件。
对于单位整数的某些值,文件未预先连接。您可能想了解这一点。当它不是你得到第一个错误:
单位既未打开也没有预先连接
对于Array(i,j)
的某些值,例如5,6或其他一些值,具体取决于编译器,该单元将预先连接。然后第一个错误没有发生,你到达 p>
格式/数据不匹配
因为你试图用整数编辑描述符写出一个字符变量。
然后,这个答案很长一段时间,你想要做
Write(Myarray(i,j),'(I5)') array(i,j)
您希望将整数值写入字符变量。
最后,请注意,如果您使用实数变量array
而不是整数犯了同样的错误,那么您将获得a different error message。在某种程度上,你不幸的是你的语法是正确的但意图是错误的。