读取和写入制表符分隔文本数据

问题描述:

我在制表符分隔格式的Excel输出:读取和写入制表符分隔文本数据

temperature H2O CO2  N2  NH3  
10 2.71539E+12 44374931376 7410673406 2570.560804 
20 2.34216E+12 38494172272 6429230649 3148.699673 
30 2.04242E+12 33759520581 5639029060 3856.866413 
40 1.75491E+12 29172949817 4882467457 4724.305292 
. 
. 
. 

我需要这些数字转化为FORMAT(1X,F7.0,2X,1P4E11.3)可读另一个代码。 这是我想出来的:

program fixformat 

    real temp, neuts(4) 
    integer i,j 
    character header 

    open(11,file='./unformatted.txt',status='old') 
    open(12,file='./formatted.txt',status='unknown') 

    read(11,*) header 
    write(12,*) header 

    do i = 1, 200 
    read(11,*) temp, (neuts(j),j=1,4) 
    write(12,23) temp, (neuts(j),j=1,4) 
    end do 

23 FORMAT(1X,F7.0,2X,1P4E11.3) 
    close(11) 
    close(12) 

    return 
end 

我不断收到此错误:

Fortran runtime error: Bad real number in item 1 of list input 

是否有任何其他的方式来将数据转换为这种格式?

+0

您是否有权访问现代Fortran编译器?我建议在你的I/O过程中使用'newunit'说明符。 – jlokimlin 2016-06-23 23:04:40

你需要一个字符串,而不是一个单一character页眉

character(80) header 

比你的程序为我的作品等。确保您的回路中有适当的线路数

Do i=1,200 

200调整为您的数据线的实际数量。

如果由于某种原因,你仍然无法读取,甚至单行线,您还可以使用以下格式:

read(11,'(f2.0,4(1x,f11.0))') temp, (neuts(j),j=1,4) 

因为标签只不过是你能轻松地跳过一个字符。

注:

无格式和格式化意味着什么Fortran语言完全不同。无格式是您可能知道的“二进制”。

为程序使用一些缩进和空白行来使它们可读。

没有理由明确使用status=unknown。只是不要在那里放任何东西。在你的情况下,status=replace可能更合适。

FORMAT语句是比较陈旧,在现代Fortran语言,我们使用的格式化字符串:

write(12,'(1X,F7.0,2X,1P4E11.3)') temp, (neuts(j),j=1,4) 

是绝对没有理由你return年底之前。退货是为了尽早从程序返回。有些在end program之前放stop,但这是多余的。