我需要使用一些 C++ 代码来读取制表符分隔的文本文件。该文件包含三列,第二列包含带空格的字符串。以下是该文件的一些示例。
1 hellow world uid_1
2 good morning uid_2
Run Code Online (Sandbox Code Playgroud)
以下是我需要用来读取文件的C++。但是,当遇到字符串中的空格时,它无法正确读取文件。
关于修改 while 循环以使其工作有什么建议吗?我对 C++ 不熟悉。请提供详细代码。谢谢!
#include <Rcpp.h>
#include <iostream>
#include <fstream>
#include <string>
std::ifstream infile (file_name.c_str());
int row = -1;
std::string col;
std::string uid;
while (infile >> row >> col >> uid) {
### operations on row, col and uid ####
}
Run Code Online (Sandbox Code Playgroud)
一种如下:
#include <iostream>
#include <vector>
#include <fstream>
#include <iterator>
#include <sstream>
using namespace std;
// take from http://stackoverflow.com/a/236803/248823
void split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss;
ss.str(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
}
int main() {
std::ifstream infile ("./data.asc");
std::string line;
while (std::getline(infile, line))
{
vector<string> row_values;
split(line, '\t', row_values);
for (auto v: row_values)
cout << v << ',' ;
cout << endl;
}
cout << "hello " << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
1,hellow world,uid_1,
2,good morning,uid_2,
Run Code Online (Sandbox Code Playgroud)
请注意末尾的逗号。不确定您想如何处理文件中的值,所以我只是尽可能简单。