在 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
是一个字符数组,每个元素的长度至少为五个字符
- 注意阵列形状
- 确保
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
(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。在某种程度上,你只是不幸你的语法是正确的,但意图是错误的。
我试图在我的 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
是一个字符数组,每个元素的长度至少为五个字符 - 注意阵列形状
- 确保
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
(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。在某种程度上,你只是不幸你的语法是正确的,但意图是错误的。