C++是否可以通過文件句柄訪問infile數據?例如,Perl中的典型習慣用法是:C++中的Infile Handle(Perl中的ala __DATA__)
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
在C++中這樣做的方法是什麼?
C++是否可以通過文件句柄訪問infile數據?例如,Perl中的典型習慣用法是:C++中的Infile Handle(Perl中的ala __DATA__)
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
在C++中這樣做的方法是什麼?
我不會說這是慣用的,因爲我從來沒有在任何C++代碼中看到它,但是您可以使用C++字符串流和C預處理器字符串粘貼將多行字符串視爲輸入流:
#include <sstream>
#include <iostream>
using namespace std;
const string data =
"once upon a time, " \
"a young lass called Goldilocks\n" \
"went for a walk in the forest.\n";
int main()
{
istringstream in (data);
for (string line; getline(in, line);)
cout << line << endl;
return 0;
}
你的意思是將文件包含在程序中?
不,C++不能這樣做。與Perl不同。有許多工具會將二進制或文本文件作爲C/C++源代碼打包。他們最終成爲全球陣營。
我總是發現有用的一件事是打開隨機存儲器作爲文件句柄的能力,這與您似乎要求的類似。在標準C++中,這可以通過isstreamstream類來完成,該類與ifstream具有相同的接口。
但是,您的問題的上下文可能意味着有更好的方式來完成您在C/C++中的想法。需要更多信息。
如果數據位於靜態(模塊範圍)字符串中,則可以使用stringstream來讀取它。 – Richard 2009-02-21 10:55:05
C++沒有這樣做的慣用方法。改爲使用單獨的數據文件。
根據您的平臺,您可能希望使用資源來獲得類似的結果,但這超出了C++的範圍。特別是,要將資源存儲在二進制文件中,您需要使用外部工具並在代碼中讀取這些資源,以便調用平臺API。例如在Windows下,有LoadResource
函數(和相關的)。
我認爲你應該把getline放在while條件本身中。即使在字符串末尾的getline失敗時,循環也會打印'line'。 – 2009-02-21 14:12:47