为什么我无法使用 std::vector <char>从C++中读取文件中的所有字符
Why I cannot read all characters from a file in C++ using std::vector<char>
我想用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)
方法
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 一种在C++中读取TXT配置文件的简单方法