从文本文件中读取数据并分离出每行中包含的数据

Reading In Data From A Text File And Separating Out The Data Contained In Each Line

本文关键字:数据 包含 分离出 文本 读取 文件      更新时间:2023-10-16

在当前的程序中,我希望逐行读取文本文件中的文本,从每行中提取数据。文本文件中的每一行都包含一个字母,如"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();
}