C++如何使用fstream读取带有空格的制表符分隔文件

syd*_*syd 6 c++ fstream

我需要使用一些 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)

Mar*_*cin 4

一种如下:

#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)

请注意末尾的逗号。不确定您想如何处理文件中的值,所以我只是尽可能简单。