在Fortran90中将整数转换为字符

时间:2015-06-04 12:30:27

标签: fortran fortran90

我正在尝试在Fortran 90中的程序中将整数转换为字符。 这是我的代码:

Write(Array(i,j),'(I5)') Myarray(i,j)

Array是一个整数数组,Myarray是一个字符数组,'(I5)',我不知道它是什么,只是为我之前工作过!

错误是:

  

"单位既没有打开也没有预先连接"

有时候

  

"格式/数据不匹配"!

2 个答案:

答案 0 :(得分:3)

'(I5)'是write语句的格式说明符:将值写为integer,总共有五个字符。

有些事情可能会出错:

  • 确保Myarray确实是一个整数(而不是real
  • 确保array是一个字符数组,每个元素的长度至少为五个字符
  • 照顾阵列形状
  • 确保ij保留有效值

这是一个有效的例子:

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或其他一些值,具体取决于编译器,该单元将预先连接。然后第一个错误没有发生,你到达

  

格式/数据不匹配

因为你试图用整数编辑描述符写出一个字符变量。

然后,这个答案很长一段时间,你想要做

Write(Myarray(i,j),'(I5)') array(i,j)

您希望将整数值写入字符变量。

最后,请注意,如果您使用实数变量array而不是整数犯了同样的错误,那么您将获得a different error message。在某种程度上,你不幸的是你的语法是正确的但意图是错误的。