あなたは私はあなたがそれを行うことができなかったと思いますifstream
を持つ文字列をカンマで別のファイルを保存したい場合。
なぜですか?
たちは、このファイルがあるとしましょう:
one,two,three
four,five,six
seven , eight, nine
ten, ten, ten
あなたはifstream
(getlineの)機能を区切り文字として,
を使用している場合、それは最初に一緒にone
、その後two
、その後three\nfour
を読み込みます。
最初のオフは、すべてあなたが必要です:
std::ifstream input_file_stream("file"); // file stream
std::string string[ 4 ][ 3 ]; // row and column
std::regex regex(R"(\s*,\s*)"); // regex pattern
int row = 0, column = 0;
第二段階:
区切り文字は
,
なく
newline
あなたが快適std::regex
を使用して、それは簡単に解決できる場合であるので、
// read from a file line-by-line
for(std::string one_line; std::getline(input_file_stream, one_line);){
// regex_token_iterator as splitter and delimiter is `,`
std::regex_token_iterator<std::string::iterator> first(one_line.begin(), one_line.end(), regex, -1), last;
// loop over each line
while(first != last){
// each time initialize a row
string[ row ][ column++ ] = std::string(*first++);
}
// for the next row
++row;
column = 0;
}
、そして最後に
for(const std::string& str : string[ 0 ]) std::cout << str << ' ';
std::cout << '\n';
for(const std::string& str : string[ 1 ]) std::cout << str << ' ';
std::cout << '\n';
for(const std::string& str : string[ 2 ]) std::cout << str << ' ';
std::cout << '\n';
for(const std::string& str : string[ 3 ]) std::cout << str << ' ';
input_file_stream.close();
と出力:
one two three
four five six
seven eight nine
ten ten ten
私のああ...そのインデントを修正してください。 TIA。 – Borgleader
[Duplicate](http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c)? – Ayak973
名前[i] [0]のみを使用している場合、名前が2D配列になるのはなぜですか? – fzd