从二进制转换为ASCII Fortran

时间:2014-01-05 02:27:19

标签: fortran ascii gfortran non-ascii-characters fortran95

我尝试用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未知未知未知

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

你写 ascii文件是一个11行和N列,然后像这样分配一个数组:

allocate(data(n,11))

这会使data成为n - 行,11 - 列数组,它似乎会转移文件中的维度。如果您正在逐个元素地读取输入文件,这可能不会导致运行时系统引发错误,尽管它可能会让您使用所需数组的转置。

但是,您逐行读取输入文件。正如您所解释的那样,文件应该包含11行数据,但您的程序会尝试读取(和写入)n行。同样,你的程序到目前为止并没有什么问题,尽管它可能没有达到你的预期。

但是你的程序希望输入文件中的每一行都提供11个值,我猜它没有,导致你报告的错误。