读取和写入制表符分隔文本数据
问题描述:
我在制表符分隔格式的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
是否有任何其他的方式来将数据转换为这种格式?
答
你需要一个字符串,而不是一个单一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
,但这是多余的。
您是否有权访问现代Fortran编译器?我建议在你的I/O过程中使用'newunit'说明符。 – jlokimlin 2016-06-23 23:04:40