在Fortran中编写ascii和二进制数据的混合

问题描述 投票:0回答:2

我正在尝试编写ASCII和二进制数据的混合,如下面给出的vtk文件格式数据。

我知道必须在file-OPEN语句中进行二进制或ASCII区分(在FORM ='BINARY'中,最好是:ACCESS ='STREAM')。我不明白如何编写我需要的格式的文件。

我想要输出的内容:

ascii keyword  
ascii keyword  
ascii keyword  
ascii keyword  
ascii keywords "variable value in ascii" ascii keywords   
.....SOME BINARY DATA ....
.....................

我在用什么:

write(fl) "# vtk DataFile Version 3.0"//CHAR(13)//CHAR(10)  
write(fl)"Flow Field"//CHAR(13)//CHAR(10)  
write(fl)"BINARY"//CHAR(13)//CHAR(10)  
write(fl)"DATASET UNSTRUCTURED_GRID"//CHAR(13)//CHAR(10)  
write(fl)"POINTS",npoints,"float"    -------------> gives value of npoints(example:8) in binary format

输出应该是什么:

# vtk DataFile Version 3.0
Flow Field
BINARY
DATASET UNSTRUCTURED_GRID
POINTS 8 Float
.....SOME BINARY DATA ....
.....................

输出是什么:

# vtk DataFile Version 3.0
Flow Field
BINARY
DATASET UNSTRUCTURED_GRID
POINTSÒ^O^@^@float
.....SOME BINARY DATA ....
...................
fortran ascii binaryfiles vtk
2个回答
0
投票

首先,您将找到在互联网上编写VTK文件的示例,例如binary vtk for Rectilinear_grid from fortran code can not worked by paraviewBinary VTK for RECTILINEAR_GRID from fortran code在各种开源研究代码中的问题,如https://bitbucket.org/LadaF/elmm/src/866794b5f95ec93351b0edea47e52af8eadeceb5/src/simplevtk.f90?at=master&fileviewer=file-view-default(这是我的简化示例,还有更多)或专用库,如http://people.sc.fsu.edu/~jburkardt/f_src/vtk_io/vtk_io.html (还有一个用于XML VTK文件的VTKFortran库)。

Socondly,即使你在Windows上,也不应该在VTK二进制文件中使用Windows行结束约定。用achar(10)(或new_lineiso_fortran_env常数)结束你的线。并且不要忘记二进制数据必须是bigendian。有一些例子如何处理上面的链接。

第三,要将整数放到字符串中,我们有大量的重复项。我的意思是真的很大。从这里开始Convert integers to strings to create output filenames at run time,我将无耻地推荐我的itoa功能,因为它会简化你的代码。

write(fl)"POINTS ",itoa(npoints)," float" 

0
投票

我会替换

write(fl)"POINTS",npoints,"float"

BLOCK
   integer, parameter :: big_enough = 132 ! Or whatever
   character(big_enough) line
   write(line,'(*(g0))')"POINTS ",npoints," Float"//achar(13)//achar(10)
   write(f1) trim(line)
END BLOCK
© www.soinside.com 2019 - 2024. All rights reserved.