因此,我正在研究一个行星大战僵尸类型的模拟类游戏,并使用和C++。我们需要做的一件事是,在启动时,游戏窗口将尝试从预先指定的主目录中读取两个文件:"pvz_levels.csv“和"pvz_players.csv”。
级别文件属于表单"level:sequence:rows:start:interval:decrement"," sequence "本身是表单(1,1,1,2,3,1,3,1,3,3)的逗号分隔列表,它是僵尸出现的顺序。如果目录中不存在此文件,则程序退出时会出现错误。
播放器文件的形式为"timestamp:player:level";,分别为上次播放的时间、玩家的姓名和最后的尝试级别。如果该文件不存在,程序将悄然跳过此操作,并作为新播放器启动。如果文件确实存在,则必须读取和解析该文件,然后将其用于计算程序等。
因此,我在读取和解析这些文件时遇到了很多困难。此外,我们需要将用户数据保存在这些文件中,并且在下一次启动时,用户应该可以通过从下拉列表中选择各自的用户来选择继续他们的游戏。他们还应该能够删除任何用户。
我非常精通c++的基本知识,但这是我的第一次GUI体验,我的教授没有详细介绍它,所以我需要对这个项目提供相当多的帮助。
感谢所有有能力帮忙的人!
发布于 2014-11-18 23:21:44
查找代码到一个可用的"csv解析器“,它代表”逗号分隔变量“。你需要的几乎是相同的,除了你用分号而不是逗号。看起来,通过更改一个字符,您的解析就可以为您完成。
您可能会找到一个csv解析器,它接受要用作解析字符的字符(我以前见过它们)。
如果您希望我能找到一个适合您使用的csv解析器,但是现在您已经知道您在寻找什么"csv解析器c++代码“了,这应该是一个快速的Google。
而且,大多数csv解析器都希望字符串被用双引号(")括起来,但这很容易修改。
发布于 2014-11-19 08:33:39
一些提示:
只需使用QFile打开文件即可。设置一个QTextStream并使用QTextStream::readLine()将所有行读入QStringList。现在,在列表中保存的QString::split()上使用QString来获取存储在这一行中的单个值。在这里,您可以很容易地使用QString::to*函数将值转换为所需的类型。
为了节省,就倒转程序吧。使用:QString("%1,%2,%3").arg(timestamp).arg(player).arg(level)设置一行,并将其放入QTextStream中。如果流连接到文件,这将写入文件。
发布于 2014-11-19 08:51:32
我已经成功地实现了这样的CSV阅读:
std::unique_ptr<QFile> csv_worker(new QFile(resource_path));
QTextStream input_csv(csv_worker.get());
QList<QStringList> data
while(!input_csv.atEnd())
{
//removes the carriage return symbol and splits the elements
QStringList line = input_csv.readLine().remove(QRegExp("\r")).split(","); //replace here with :
data << line;
}
csv_worker->close();它读取完整的文件,每一行都生成一个QStringList。对于QStringList中的第二个元素,假设(1,1,1,2,3,1,1,3,3}),您必须在一个子QStringList中进一步拆分它,然后去掉方括号,如下所示:
QStringList sequence = data[i][1].remove(QRegExp("{")).remove(QRegExp("}")).split(",");https://stackoverflow.com/questions/27005994
复制相似问题