這真的取決於你如何去分析文本。一種方法是將數據讀入一個字符串向量中。我會假設你已經涵蓋如可擴展性/使用內存等
std::vector<std::string> lines;
std::string line;
ifstream file(filename.c_str(), ios_base::in);
while (getline(file, line))
{
lines.push_back(line);
}
file.close();
這將緩存文件中lines
問題。接下來你需要通過線
for (std::vector<std::string>::const_iterator it = lines.begin();
it != lines.end(); ++it)
{
const std::string& line = *it;
if (line.empty())
continue;
switch (line[0])
{
case 'g':
// Some stuff
break;
case 'v':
// Some stuff
break;
case 'f':
// Some stuff
break;
default:
// Default stuff including '#' (probably nothing)
}
}
當然,這是非常簡單化,很大程度上取決於你想要用你的文件做什麼。
你已經作爲例子給出的文件的大小是不大可能造成IO壓力(除非你使用一些非常輕便的設備),但如果你正在讀許多文件一次,我想這可能是一個問題。
我覺得這裏的問題是,以儘量減少IO,我不知道這解決方案將真正幫助那麼多,因爲你將要遍歷集合兩次。 如果您需要回去並保持在讀取相同的文件,一遍又一遍的話,那肯定會加快速度,在內存中緩存文件,但也有同樣簡單的方式來做到這一點,如內存映射文件和使用正常的文件訪問。如果你真的擔心,那麼嘗試分析這樣的解決方案,避免在從IO讀取時直接處理文件。
什麼格式的輸入文字? CSV? XML? YAML? – 2012-07-13 14:15:55
這是Wavefront OBJ文件,純文本文件。例如:http://people.sc.fsu.edu/~jburkardt/data/obj/diamond.obj – Martin 2012-07-13 14:21:51