fortran十六进制数据读取
现在有这样的数据:icem生成的ansys fluent可以用的网格文件,数据格式如下:输入文件:
(0 "Faces:" )
(13(0 1 28 0))
(13(3 1 283 0)(
735 0 0
237 0 0
281 0 0
782 0 0
768 0 0
561d 0 0
... (注:一共28H(十六进制)行 = 40(十进制)行)
))
需要输出节点数据:(每一行三个数是每一个节点的编号,每一行组成一个三角形)
7, 3, 5;
2, 3, 7;
2, 8, 1;
7, 8, 2;
7, 6, 8;
5, 6, 29;
如果用格式编辑符Z,那么需要指定长度,比如说 read(filenum,'(3z1)') 的话,1d这个十六进制数字就读不进来了。请问有什么好办法吗?
看起来两个数字之间有空格,5^^6^^1d^,尖号表示空格。
这种格式,用3z3 你的编译器支持 z0 吗? fcode 发表于 2018-7-24 19:11
你的编译器支持 z0 吗?
嗯我的是IVF2011+vs2012
z0是什么呢?
我今天用了一个比较蹩脚的办法:先按照字符串读取 然后再把字符串按照Z格式转成数字
但是不知道这样会不会有bug li913 发表于 2018-7-24 17:13
看起来两个数字之间有空格,5^^6^^1d^,尖号表示空格。
这种格式,用3z3
两个十六进制数字之间只有一个空格。
而且网格数多了的话 会出现位数不一样,比如 1271 fd0 abcd3 这种位数不一致的情况,没法用z。 Richael_Liang 发表于 2018-7-25 00:11
嗯我的是IVF2011+vs2012
z0是什么呢?
我今天用了一个比较蹩脚的办法:先按照字符串读取 然后再把字符串 ...
read(filenum,'(3z0)') Richael_Liang 发表于 2018-7-25 00:11
嗯我的是IVF2011+vs2012
z0是什么呢?
我今天用了一个比较蹩脚的办法:先按照字符串读取 然后再把字符串 ...
这是很高端的办法,并不蹩脚。
思路上没有bug,代码写得规范严谨的话,毫无破绽。 本帖最后由 pasuka 于 2018-7-25 08:50 编辑
关键在于fortran、C或C++的标准里面没有字符串切割函数
建议用MATLAB或者python这样的脚本语言进行处理
src = "1271 fd0 abcd3 5 6 1d"
rst =
print(rst)
输出
4721, 4048, 703699, 5, 6, 29 pasuka 发表于 2018-7-25 08:49
关键在于fortran、C或C++的标准里面没有字符串切割函数
建议用MATLAB或者python这样的脚本语言进行处理
感谢您的解答。之前弄不出来的时候打算用matlab了。但是后来用了先按字符串读取再转成数字的方法,对一个简单的网格文件读取成功了。不知道复杂情况如何,会不会出问题。 kyra 发表于 2018-7-25 08:29
这是很高端的办法,并不蹩脚。
思路上没有bug,代码写得规范严谨的话,毫无破绽。 ...
大概分为两步:
1. read(filenum,*) n1,n2,n3 !按照字符读取 这样就可以按照空格区分不同的数字了
2. read(n1,'(z4)') n4 ! 把字符n1转变为数字(十六进制)n4
ps:绫濑遥我女神!!!!敲可爱!!!
页:
[1]
2