从二进制转换为ASCII Fortran 我尝试用FORTRAN(或如果某人有另一种想法:Pyton,java,C++…)在一个数字OutPuxFiel.txt中转换一个输入PID.FIL.二进制文件。ascii文件是一个只有数字的11行N列文件(即:1e-21、0.0、1…)

从二进制转换为ASCII Fortran 我尝试用FORTRAN(或如果某人有另一种想法:Pyton,java,C++…)在一个数字OutPuxFiel.txt中转换一个输入PID.FIL.二进制文件。ascii文件是一个只有数字的11行N列文件(即:1e-21、0.0、1…),fortran,ascii,gfortran,non-ascii-characters,fortran95,Fortran,Ascii,Gfortran,Non Ascii Characters,Fortran95,我尝试了这篇文章,但这与我的想法有点不同:我想读取二进制文件并编写一个输出文件.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)

我尝试了这篇文章,但这与我的想法有点不同:我想读取二进制文件并编写一个输出文件.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^^^ R�M0wc�6.�7.�^@^@^@^FA0^@^@^@^@^@^@^@^@^‌​@^@^@^@^@^@^@^@^@^@@�e^A^@^@^@^ B+�^[2/[��^@^@^@^辉�#$

我可以编译该程序,但当我尝试运行它时,会出现以下错误消息:

forrtl:严重(59):列表定向I/O语法错误,第20单元,文件/../input.dat 图像PC例程行源 ascii 0805D0AA未知 ascii 0805B14D未知 ascii 0804A1EA未知 ascii 08049E67未知 libc.so.6 B75CF4D3未知

非常感谢您的帮助。

您编写的ascii文件是11行N列,然后分配如下数组:

allocate(data(n,11))
这使得
data
成为一个
n
-行、
11
-列数组,它似乎可以将维度从文件中转置。如果您逐个元素读取输入文件,则可能不会导致运行时系统引发错误,尽管它可能会让您转置所需的数组

但是,您可以逐行读取输入文件。正如您所解释的,该文件应该有11行数据,但您的程序尝试读取(和写入)
n
行。同样,到目前为止,您的程序实际上没有什么问题,尽管它可能没有达到您期望的效果


但是您的程序要求输入文件中的每一行提供11个值,我猜它没有,这导致了您报告的错误。

如果
ascii
文件中有数字作为文本,那么重新创建文本文件的目的是什么?如果文件中有二进制数字,那么它就不是
ascii
。请澄清或显示f
input.dat
。当我尝试使用“nano-input.dat”命令打开input.dat文件时,以下是内容:^@^@^@^@^@^^@^^^@^^@^^^@^ A�^@^@^@^A^^^^^^^ A^^^ R�M0wc�6.�7.�^@^@^@^FA0^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@@�e^A^@^@^@^ B+�^[2/[��^@^@^@^辉�#$ 很多这样的值,但当我打开这个whit程序时(swiftvis)将ascii转换为txt我看到了正确的数字。请更新您的问题。输入文件类型是二进制的,而不是
ascii
。尝试用float打开它并将其显示为float。这将确认二进制文件的格式。是的,这是一个我没有看到的错误,现在我在尝试运行程序时进行了检查。“/ascii”我收到以下错误:forrtl:severe(59):列出定向I/O语法错误,单元20,文件/../input.dat图像PC例程行源ascii 0805D0AA未知ascii 0805B14D未知ascii 0804A1EA未知ascii 08049E67 Unknown libc.so.6 B75CF4D3 Unknown在评论中不要放任何你想让别人读的东西,尤其不要放那些为了可读性需要仔细格式化的代码或输出。编辑你的问题。最后我用f.90代码解决了我的问题。所以帖子可能会被关闭。谢谢大家!!!