为什么我无法使用 std::vector <char>从C++中读取文件中的所有字符

Why I cannot read all characters from a file in C++ using std::vector<char>

本文关键字:读取 C++ 文件 字符 gt std vector char 为什么 lt      更新时间:2023-10-16

我想用c++读取一个大的CSV文件,但逐行读取对我来说太慢了(大约500万条记录)。由于我不确定文件中的分隔符(或空格),我逐个字符读取文件,转换为字符串,拆分所有值,并通过转换后的值将数组填充为双值。我的代码如下所示,但它无法读取"\n"answers"字符?你能帮我怎么读吗。如果有任何更快、可靠的阅读方式。

bool readPtFast(istream *dataIn, ANNpointArray &p) // read point (false on EOF)
{
    std::istream_iterator<char> begin(*dataIn), end;
    std::vector<char> in(begin, end);
    std::string wholeFileString(in.begin(), in.end()); // Not all chars are read!!

    std::vector<std::string> split_values_string;
    std::vector<double> split_values_double;
    boost::split(split_values_string, wholeFileString, boost::is_any_of("nr,;t "));
    if (split_values_string.size()!=NRecords*NDims) {
        cerr << "Error reading file. I expected " << NRecords*NDims << " values, but I found " << split_values_string.size() << "records.a";
        getchar();
        return false;
    }

    std::transform(split_values_string.begin(), split_values_string.end(), 
        std::back_inserter(split_values_double), 
        boost::lexical_cast<double, std::string>);
    std::copy(split_values_double.begin(),split_values_double.end(),*p);
    return true;
}
默认情况下,std::istream_iterator将跳过空白。也许您可以使用操纵器std::noskipws,如下所述:http://www.cplusplus.com/reference/ios/noskipws/或者可能是stream.unsetf(std::skipws)方法