如何使用Fortran读取具有不同长度数字和字符的格式化ASCII STL文件?

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

我正在尝试读取格式不同的STL文件。一个STL文件通用格式包括

   solid solid_name
      facet normal n1 n2 n3 (the triangles normal vector)
         outerloop         (one of the markers I want to read)
            v1          x1 y1 z1
            v2          x2 y2 z2       (three vertex of the triangle/facet)    
            v3          x3 y3 z3
         endloop
        end facet
    endsolid

想法是遍历整个实体,构面和顶点并读取信息。我的问题是我正在尝试读取不同格式的文件:例如,在其中一个文件中,我的第一个方面是:

>solid Peca2
>   facet normal 1.000000e+00 0.000000e+00 0.000000e+00
>      outer loop
>         vertex 1.250000e+02 7.500000e+01 1.000000e+02
>         vertex 1.250000e+02 2.500000e+01 1.000000e+02
>         vertex 1.250000e+02 7.500000e+01 5.000000e+01
>      endloop
and so on.

我的问题是,由于每个顶点分量的值可能在大小上有所不同,因此我很难找到正确的格式来读取此信息。我已经尝试过指数,浮点甚至字符串,但是我的代码从文件中读取的数据是完全荒谬的,例如:

 solid Peca2

   facet normal 1.000000e+00
  0.000000e+0
 0 0.000000e+00

   outer loop

    vertex 1.250000e+

读取完数据后,应该在新的STL文件中写入相同的数据。我已经尝试过无格式和格式化的读写,但是似乎没有任何效果。我观察到的唯一效果是写入数据从一行移到另一行,如上图所示。

所以,我有一些问题:

1)如何编写通用的STL阅读器,以在不预先指定的情况下以任何格式读取任何文件?可能吗?

2)如何从长度可变的文件中读取浮点和指数数据,如在该行中可以看到的>]

1.250000e+02 7.500000e+01 5.000000e+01 

3)我尝试将每一行的信息作为可分配的字符串读取,并且显然是成功的,但是当我打印该字符串以检查其内容时,输出也像以前一样混乱:

facet n
    ormal 1.000000e+00 0
      .000000e+00 0.000000
   e+00

[有人可以帮我解决这些格式问题吗?非常感谢您的帮助,因为我已经为这些问题苦苦挣扎了很长时间。预先非常感谢!

我正在尝试读取格式不同的STL文件。通用格式的STL文件由solid solid_name facet法线n1 n2 n3(三角形法线向量)外部循环组成...

arrays string stl character fortran90
1个回答
0
投票

P.S .:我已经尝试了以下形式的几乎所有读取命令,以多种组合改变了格式的宽度和数字,但没有任何正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.