【发布时间】:2011-04-16 02:45:28
【问题描述】:
您将如何使用 C 或 C++ 读取简单的文件格式?
以 Wavefront .obj 文件格式为例:
# this is a box
o 1
v -0.5 -0.5 0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 -0.5
v -0.5 0.5 0.5
v 0.5 -0.5 0.5
v 0.5 -0.5 -0.5
v 0.5 0.5 -0.5
v 0.5 0.5 0.5
usemtl Default
f 4 3 2 1
f 2 6 5 1
f 3 7 6 2
f 8 7 3 4
f 5 8 4 1
f 6 7 8 5
由于文件可能非常大,我用 operator[] 创建了一个中间类(FileBuffer)。它在内存中只有 4096 字节的文件,并在需要时读取新的部分。 文件格式非常简单,但我不喜欢为此使用 flex/bison 之类的东西。这只会使事情复杂化。
解释这种(类型)文件的正确方法是什么?目前我有很多嵌套的 for/while 循环和许多计数器来跟踪。还有许多 switch/elseif 语句。我如何使这段代码可维护且整体上更有条理?
谢谢。
【问题讨论】:
-
您问的是 C 还是 C++?它们是不同的语言,提供的解决方案也可能不同。
-
@Rob Adams OP“用 operator[] 制作了一个中间类”,听起来像 C++
-
stackoverflow.com/questions/2908854/… 可能会提供一个合理的起点。
-
删除了与不一致的[c]标签“我用
operator[]创建了一个中间类(FileBuffer)。” -
我实际上也对 C 方法感兴趣,但首选 C++ ;)。亚当斯的方式看起来像一个我从未想过的简单方法:o