1

私はこのような機能を持っています(どこかで見つけました、\tセパレーターで動作します)。

vector<string> delimited_str_to_vector(string& str, string delimiter)
{
  vector<string> retVect;
  size_t pos = 0;

  while(str.substr(pos).find(delimiter) != string::npos)
  {
    retVect.push_back(str.substr(pos, str.substr(pos).find(delimiter))); 
    pos += str.substr(pos).find(delimiter) + delimiter.size(); 
  }

  retVect.push_back(str.substr(pos));

  return retVect;
}

「\r\n」区切り文字による文字列の分割に問題があります。私は何を間違っていますか?

string data = get_file_contents("csvfile.txt");
vector<string> csvRows = delimited_str_to_vector(data, "\r\n");

私のファイルはCRLF改行に使用していると確信しています。

4

2 に答える 2

2

getlineを使用して、ファイルを 1 行ずつ読み取ることができます。

is から文字を抽出し、区切り文字 delim (または改行文字 '\n' ...) が見つかるまで、それらを str に格納します。区切り文字が見つかった場合、それは抽出されて破棄されます。つまり、格納されず、次のその後、入力操作が開始されます。

おそらく、行末を削除する関数を使用してファイルを既に読み取っている可能性があります。

于 2013-09-16T03:01:11.570 に答える
1

ファイルをテキスト モードで開いた場合、つまりstd::ios_base::binary(または代替スペルの 1 つを) 言及しなかった場合、システム固有の行末シーケンスが\n文字に置き換えられる可能性があります。つまり、ソース ファイルが を使用\r\nしていたとしても、ファイルを読み取るときにこの文字シーケンスが表示されない場合があります。binaryこれらのシーケンスを本当に処理したい場合は、ファイルを開くときにフラグを追加します。

于 2013-09-16T03:00:51.323 に答える