在 Fortran90 中将整数转换为字符

Converting integer to character in Fortran90

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

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

Array是一个整型数组,Myarray是一个字符数组,还有'(I5)',我也不知道是什么,我之前用过!

错误是:

"Unit has neither been opened not preconnected"

有时

"Format/data mismatch"!

'(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

(I5)部分的意思。该答案还指出了其他一些问题并解决了主要问题。它没有明确说明解决方案,所以我会写在这里。

您有两个错误,但原因相同。我将重述您的写语句,明确说明一些隐含的内容。

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

那个隐含的东西是unit=。然后,您要求将字符变量 Myarray(i,j) 写入连接到由整数变量 Array(i,j).

给出的单元的文件

对于单位整数的某些值,文件未预先连接。您可能想阅读相关内容。如果不是,您会收到第一个错误:

Unit has neither been opened not preconnected

对于 Array(i,j) 的某些值,例如 5、6 或其他一些值,具体取决于编译器,该单元将被预先连接。然后第一个错误就不会出现,你会得到

Format/data mismatch

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

那么,这个答案就是说你想做的很长的路要走

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

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

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