如何允许文本文件中丢失数据
how to allow for missing data in a text file
我有一个包含大量数据集的大文件,有一些空白,虽然标记为"——",无论出于何种原因,数据没有被记录。其余的数据将存储为双向量,我的问题是我如何捡起缺失的数据和存储这个缺失的数据为零?我的数据文件的一个片段;
0 29.1 ---
0 65.9 ---
2 56.5 ---
6 19.7 44.3
9 69.8 64.9
11 118.6 64.8
7 35.7 64.1
if (myfile.is_open())
{
int count = 0;
while ( myfile.good() )
{
getline (myfile,line);
/*if (line == "---")
{
sun(0.0);
}*/
if (count > 6)
{
std::istringstream buffer(line);
int month;
double rain, sun;
if (buffer >> month >> rain >> sun)
{
Weather objName = {month, rain, sun};
data_weather.push_back(objName);
}
}
count++;
}
myfile.close();
将数据作为字符串一次一行读取。检查是否为"——"。如果是,则保持0.0,如果不是,则转换为双精度类型并保存。
string line;
while (getline(file, line))
{
if (line == "--")
{
save(0.0);
}
else
{
istringstrleam buf(line);
double value;
if (buf >> value)
{
save(value);
}
else
{
error("could not convert value");
}
}
}
我使用istringstream来完成从string到double的转换。
根据问题中关于文件格式的新信息,下面的代码应该可以工作(但它是未经测试的代码)。
string line;
while (getline(file, line))
{
if (count > 6)
{
int month;
double rain, sun;
std::string sun_as_string;
std::istringstream buffer(line);
if (buffer >> month >> rain >> sun_as_string)
{
if (sun_as_string == "--")
{
sun = 0.0;
}
else
{
std::istringstream buffer2(sun_as_string);
if (!(buffer2 >> sun))
{
// couldn't convert the sun value, so just set to zero
sun = 0.0;
}
}
Weather objName = {month, rain, sun};
data_weather.push_back(objName);
}
}
++count;
}
基本思想和前面一样,读取sun值为字符串,只有当它不是"——"时才转换为双精度类型
我将给出一个稍微不同的替代方案,它不会显式检查行是否为--
,它只会看到它不是有效的float
。
您可以简单地读取每一行一次与std::getline
,这将只会停止,一旦你到达文件的末尾。您可以尝试从每行提取到已初始化为0
的float
(或double
)。如果提取失败,该值仍为0
。
std::string line;
while (std::getline(file, line)) {
std::istringstream ss(line);
float f = 0.0f;
ss >> f;
results.push_back(f);
}
相关文章:
- C++数据文件、数组和计算赋值
- 数据文件的第二行未正确读取
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 将数据文件读入结构 C++
- 引入流时C++数据文件未正确读取?
- 如何在数据文件中查找和显示内容
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 将数据文件读入对象数组时出现问题
- C :数据文件有错误:预期的无限制ID
- C 和 C++:带有错误"Expected unqualified-id"的数据文件
- 如何在C 中读取一系列数据文件
- 从数据文件中读取每2个字节,并在向量中进行比较
- 写入单个大数据文件或多个小文件:哪个更快?
- 在读取数据文件时,如何找到用户字符串输入的字谜?
- 保护外部数据文件免受未经授权的修改
- C 读取数据文件
- C 如何将数据文件读取到结构或向量以及返回结构或向量
- 具有挑战性的数据文件格式,需要将其读取为包含类对象的数组的VAR
- C 中的Google单元测试:如何编写持久数据文件