2

最初の質問

私は次のことをしようとしました

myfile.open("file.txt");
    while(!myfile.eof())
    {
getline(myfile,sline);
delimiter = sline.substr(2,1);
    }

cout << "Delimiter is " << delimiter << endl;

私のfile.txtはこのようなものです

AD#Andorra#AN#AD#AND#20.00#Andorra la Vella#Europe#Euro#EUR#67627.00
AE#United Arab Emirates#AE#AE#ARE#784.00#Abu Dhabi#Middle East#UAE Dirham#AED#2407460.00

実行時にエラーコードを返します

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr
Aborted (core dumped)

値 # を区切り文字として取得したいのですが、

2 番目の質問

私の .h ファイルはこの宣言を取得しました

#define LINE_DATA_DELIMITER     ","

LINE_DATA_DELIMITER を "#" として再定義できますか? また、"#" を使用する代わりに、変数区切り記号の値を使用して定義できますか?

更新: 質問 1 が解決されました.2 番目の質問について助けが必要です ありがとう!

4

2 に答える 2

5

これは、ループを 1 回実行しすぎるために発生します。このeof状態は、 1 つの読み取りが既に失敗した後にのみ発生します。

代わりにこれを試してください

myfile.open("file.txt");
while(getline(myfile,sline))
{ 
   delimiter = sline.substr(2,1);
 } 
于 2012-08-06T11:58:44.440 に答える
0

これは substr doc http://www.cplusplus.com/reference/string/string/substr/で読みました。

「渡された位置が文字列の末尾を超えている場合、out_of_range 例外がスローされます。」sline.substr(2,1) で範囲を逆にしたためだと思います。

于 2012-08-06T11:58:33.697 に答える