从文本文件中读取数据并分离出每行中包含的数据
Reading In Data From A Text File And Separating Out The Data Contained In Each Line
在当前的程序中,我希望逐行读取文本文件中的文本,从每行中提取数据。文本文件中的每一行都包含一个字母,如"a",后跟冒号":",后跟一个整数,如"2"。程序中应该读取数据的功能目前看起来是这样的:
void readFile()
{
std::ifstream aFile;
std::string alldata;
std::string letter;
aFile.open("KeyPopularity.txt");
while (std::getline(aFile, alldata))
{
letter = alldata[0];
for (int i = 0; i < keyboardKeys.size(); i++)
{
if (keyboardKeys[i].character==letter)
{
keyboardKeys[i].noOfPresses = int(alldata[2]);
}
std::cout << letter << " ";
std::cout << int(alldata[2]) << "n";
}
}
aFile.clear();
}
然而,位置0处的alldata变量(alldata[0])不是只列出一个字符,即字母在字母前列出一个数字,例如87 W,而不是只有W。问题是为什么会发生这种情况,有没有办法逐行从文本文件中的每一行提取数据,以获得字符串位置0处的字母和字符串位置2处的数字?
程序中的一些观察/错误:
- letter是一个std::字符串,但是您可以为它指定一个字符;这是允许的,但你确定这就是目的吗?您可以使用char而不是string
- alldata[2]是一个字符。例如,对于行"A:2",值将为"2"(ascii值为50,与值2不同)。不能简单地用int()将其转换为int。要将一个数字的字符("0".."9")转换为其相应的整数值,您需要从ascii码(或"0")中减去值48
- 还将keyboardKeys[i].charge的类型更改为char,而不是std::string
你可以这样重写你的代码:
void readFile()
{
std::ifstream aFile;
std::string alldata;
char letter;
aFile.open("KeyPopularity.txt");
while (std::getline(aFile, alldata))
{
letter = alldata[0];
for (int i = 0; i < keyboardKeys.size(); i++)
{
if (keyboardKeys[i].character == letter)
{
keyboardKeys[i].noOfPresses = alldata[2] - '0';
}
std::cout << letter << " ";
std::cout << alldata[2] - '0' << "n";
}
}
aFile.clear();
}
相关文章:
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 如何避免在数据结构中包含存储为字段的类?
- C++ 打印包含数据结构的数组
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 将包含二进制数据的 QByteArray 传递到按值运行
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 使用 range-v3 读取包含逗号分隔数据的行
- 即使类不包含数据,C++ 14 是否仍会生成默认函数?
- 指针数据类型变量如何包含对象?
- ctypes - 结构包含垃圾/不正确的数据
- 在wxWidgets的事件中包含我自己的数据的最佳方法是什么?
- C++ 矢量不显示包含对象的数据
- 拒绝包含某些公共静态数据成员的类型
- 在C++中设置仅包含每个类的一个外观的数据结构
- C++ 逐行从文件(包含空格)读取数据
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- C++ 包含针对多种类型数据的布尔测试的模板会获得匹配错误
- 当数据包含空格时,如何将制表符分隔文件的内容加载到C++字符串的 2D 向量中
- 如何将 qrc 数据包含在使用 CMake 编译的基于 Qt 的二进制文件中