我尝试用fortran转换数字output_file.txt中的input_file.binary(或者如果有人有另一个想法:pyton,java,c ++ ...)。 ascii文件是11行和N列文件,只有数字(即:1e-21,0.0,1 ......)。
我试试这篇文章ASCii to BInary Conversion Program in java,但这与我的想法有点不同:我想阅读二进制文件并编写一个output_file.dat,所以我尝试使用这个fortran代码:
program binary
implicit none
integer :: i, n
real, allocatable :: data(:,:)
open(20,file="input.dat",status="unknown",err=88)
n = 0
do
read(20,*,end=1)
n = n+1
end do
1 rewind(20)
allocate(data(n,11))
OPEN(10, file="output_file.txt")
do i = 1, n
read(20,*) data(i,:)
write(10,*) data(i,:)
end do
close(20)
end program binary
当我想用nano file.binary
检查文件时,输出就是这样:
^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ C ^ @ ^ @ ^ A ^ @ ^ @ ^ @ ^ A ^ @ ^ @ ^ @ ^ A ^ @ ^ RM0wc6 7 ^ @ ^ @ ^ @ ^ FA0 ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ @@ ^ ê^ A ^ @ ^ @ ^ @ ^ B + ^ [2 / [^ @ ^ @ ^ @ ^ FAI#$
我可以编译程序但是当我尝试运行它时,我有以下错误消息:
forrtl:severe(59):列表导向的I / O语法错误,单元20,文件/.../input.dat 图像PC例行线源 ascii 0805D0AA未知未知未知 ascii 0805B14D未知未知未知 ascii 0804A1EA未知未知未知 ascii 08049E67未知未知未知 libc.so.6 B75CF4D3未知未知未知
非常感谢你的帮助。
答案 0 :(得分:1)
你写 ascii文件是一个11行和N列,然后像这样分配一个数组:
allocate(data(n,11))
这会使data
成为n
- 行,11
- 列数组,它似乎会转移文件中的维度。如果您正在逐个元素地读取输入文件,这可能不会导致运行时系统引发错误,尽管它可能会让您使用所需数组的转置。
但是,您逐行读取输入文件。正如您所解释的那样,文件应该包含11行数据,但您的程序会尝试读取(和写入)n
行。同样,你的程序到目前为止并没有什么问题,尽管它可能没有达到你的预期。
但是你的程序希望输入文件中的每一行都提供11个值,我猜它没有,导致你报告的错误。