【发布时间】:2018-05-27 23:29:53
【问题描述】:
我想在不丢失任何数据的情况下最小化 FORTRAN 中输出文件的大小。为了找到这样做的最佳方法,我编写了程序:
program test
character(len=255) format
1 format(9i3)
c FORMATTED
open(99,file='form1.txt',form='formatted')
do i=1,1
write(99,1) 1, 2, 3, 4, 5, 6, 7, 8, 9
enddo
close(99)
c UNFORMATTED
open(98,file='form2.txt',form='unformatted')
do i=1,1
write(98) 1, 2, 3, 4, 5, 6, 7, 8, 9
enddo
close(98)
c DIRECT ACCESS
nrec=sizeof(i)*9
open(97,file='form3.txt',form='unformatted',
& access='direct',recl=nrec)
do i=1,1
write(97,rec=i) 1, 2, 3, 4, 5, 6, 7, 8, 9
enddo
close(97)
call system('ls -lh form?.txt')
end
这将创建三个文件,每个文件都有一条记录。这个程序的输出是:
-rw-r--r--. 1 user users 28 May 27 17:10 form1.txt
-rw-r--r--. 1 user users 44 May 27 17:10 form2.txt
-rw-r--r--. 1 user users 36 May 27 17:10 form3.txt
如果 FORM='UNFORMATTED',则每条记录都以 INTEGER*4 计数开头和终止,使每条记录比正常长度长 8 个字符。此约定不与其他语言共享,因此仅对 FORTRAN 程序之间的通信有用。
我的问题是:
- 为什么
form1.txt和form2.txt之间有16 个字节(而不是前面引用中提到的8 个字节)?请注意,file1.txt的大小取决于格式(例如,如果我将行format(9i3)更改为format(9i4),file1.txt的文件大小将增加 9 个字节)。
我的主要问题是:
- 我有五列数百万行的大数据文件(大于 100G)。 FORTRAN 中减小输出文件大小的最佳方法是什么(可能以二进制形式编写)?
与我类似的问题是:Best way to write a large array to file in fortran? Text vs Other
【问题讨论】: