正在分析文件I/O

Parsing File I/O

本文关键字:文件      更新时间:2023-10-16

我正在编写一个C++程序,该程序需要能够从.txt文件中读取并解析输入,以便能够从每一行中获得命令和参数。

说我有Animals.txt

A cat1 3
A dog1 4
A cat2 1
D cat1

我希望能够获取这个文件,然后为第一个字母创建一组if语句,这样我就可以调用主类中与第一个字母对应的函数,并将该行的其余部分作为参数传入。

我想做的事情的一个例子:

if(line[0].compare("A")==0){
    add(line[1],line[2]);
}
if(line[0].compare("D")==0){
    delete(line[1])
}

我尝试过使用strtok和stringstream类,但要么我不知道如何实现以满足我的需求,要么它们不适合我的需求——因为值被放在了[0]行,而这些值不在文本文件的行开头。任何帮助都将不胜感激。

首先需要std::ifstream来打开文件。然后您需要std::getline从文件中提取行:

std::ifstream file("Animals.txt");
std::string line;
while (std::getline(file, line)) {
  // ...
}

然后在while循环中,将行粘贴到std::stringstream中,并提取所需的值:

std::stringstream ss(line);
char letter;
ss >> letter;
// And so on...

对于char,您可以在if语句中进行简单的==比较:

if (letter == 'A') {
  // ...
}

如果您将字母提取到std::string中,请确保与"A"进行比较。

我会让你把它全部插在一起,然后计算出其余的。

创建一个istringstream对象来分割每一行:

std::istringstream line(my_line);
std::string line0;
std::string line1;
std::string line2;
line >> token;
if (line0 == "A") {
    line >> line1 >> line2;
    add(line1, line2);
} else if (line0 == "D") {
    line >> line1;
    remove(line1);
}