Fortran把字符型数据输出为二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fortran把字符型数据输出为二进制相关的知识,希望对你有一定的参考价值。

输出二进制是为了减小生成文件的大小,这些数据输出后用tecplot后处理;
下面是我的部分代码,执行后发现这部分不是二进制。请问怎么修改?多谢!

open(666,file = ch_out, status='unknown',FORM='UNFORMATTED') ! binary output
write(666) "TITLE="""simulation results"" ! gfz
write(666) "VARIABLES=""X"",""Y"",""DX"",""DY"",""VX"",""VY"",""DAM"",""W""

    尽管你按照二进制方式打开文件,但你输出的数据,都是字符串,字符串的二进制形式与文本是一样的。只有整型和浮点数,才有差异。

    二进制文件中也可以包含文本的部分,例如字符串。你可以试试用记事本打开一个 exe 文件,这就是二进制的,但是你依然可以看到其中有一些字符串,例如 This program cann't run under DOS 之类的。

    如果你只输出字符串,那么文本文件和二进制文件就完全没有任何差异了。也不会减小文件的大小。

    关于二进制的读写,你还需要更多的学习。我建议你使用直接读写方式,而不是顺序读写。也就是 access = 'direct' 并指定 RecL 和 Rec

追问

遇见高手了!多谢!
1. 我用ultraedit 打开正确的输出,发现确实是字符串。
不过不是“simulation”而是“s..i..m..u..l..a”这样
2. 多谢,以前还不知道
3. 我的输出只是在开头有一些字符串,中间99.99%的都是实数
4.嗯,我再看看资料。刚用一点点

追答

你的其他99.99%的部分,是正确的二进制么?

我想不到为什么会是 s..i..m..u..l..a 这样的,我建议你把代码和生成的文件打包上传到百度网盘,并分享给我。
嗯,关于二进制的读写,你可以看我百度空间的日志:
http://hi.baidu.com/olid_stone/item/ad1a4cc822b1241051505880

参考技术A 这样的格式输出是二进制没错。

可能是你引号没用对,导致Tec无法正确读取,输出代码修改如下:

write(666) 'TITLE="simulation results"' ! gfz write(666) 'VARIABLES="X","Y","DX","DY","VX","VY","DAM","W"'追问

这样好像不对啊,tecplot提示unexpected end of file in datafile header.

追答

可以不要这一行write(666) 'TITLE="simulation results"'
你可以不用二进制输出,看看输出的结果是什么

R语言数值型转化成字符串

在R中,我导入的文件中有一个变量是30个数字组成的,系统把它当做数值型变量处理的,输出的时候是科学计数法的形式输出。有没有一种能够保持它原来状态的方法啊?

把这个数字存成字符串,用的时候再用as.numeric()变成数字; 参考技术A 比如数据框名字为test,数据列A1是字符型,转化为数值型的直接可以:
test$A1=as.numeric(test$A1)

就可以将原数据框中的A1列进行转换

以上是关于Fortran把字符型数据输出为二进制的主要内容,如果未能解决你的问题,请参考以下文章

fortran 字符串太长 如何换行

FORTRAN里怎样把数值类型(整数,浮点数)转换为字符串

R语言数值型转化成字符串

c#如何把输入的字符(汉字和英文和数字)输出为对应的二进制

怎样把十进制数据转换为十六进制字符串

MFC 十六进制以字符串形式直接输出