使用 Qt 获取 csv 文件中两行之间所有行
Get all lines between two specific lines in csv file using Qt
我正在使用以下代码读取qt中的csv文件:
QStandardItemModel* readFile()
{
QFile config_file(FILE_PATH);
if (config_file.open(QIODevice::ReadOnly)) {
int lineindex = 0;
QTextStream in(&config_file);
while (!in.atEnd()) {
QString fileLine = in.readLine();
QStringList lineToken = fileLine.split(",", QString::SkipEmptyParts);
//ignore commented lines
if(!fileLine.startsWith("#", Qt::CaseSensitive)){
for (int j = 0; j < lineToken.size(); j++) {
QString value = lineToken.at(j);
QStandardItem *item = new QStandardItem(value);
fileContent->setItem(lineindex, j, item);
}
lineindex++;
}
}
return fileContent;
config_file.close();
}
}
我的csv如下所示:
TYPE_ES, type_1
subtypes_1, a, b
subtypes_2, 1, 2,3
subtype_3 1,3,4,5
TYPE_ES, type_2
subtypes_1, x, y
subtypes_2, 4,5,6
subtype_3 1,3,4,5
TYPE_ES, type_3
subtypes_1, x, y
subtypes_2, 4,5,6
subtype_3 1,3,4,5
我想阅读并保存csv中"TYPE_ES,type_1","TYPE_ES,type_2"之间以及"TYPE_ES,type_2","TYPE_ES,type_3"等之间的所有行。
为了从QstandardItemModel访问元素,我使用以下方法:
QStringList listDeviceData;
if(fileContent->rowCount() > 0)
{
for (int row = 0; row < fileContent->rowCount(); row++)
{
for (int col = 0; col < fileContent->columnCount(); col++)
{
QModelIndex index = fileContent->index(row,col,QModelIndex());
listDeviceData.append(deviceData->data(index).toString());
}
}
}
}
此方法允许我一次只检索一列的元素。但是,如果我要像上面提到的那样获取一组行,我如何解析 QStandardItemModel 并实现这一点?
可能是
这样的:
void readFile(QVector<QStringList>& vectorOfStrings)
{
QFile config_file(FILE_PATH);
if (config_file.open(QIODevice::ReadOnly)) {
QTextStream in(&config_file);
while (!in.atEnd()) {
QString fileLine = in.readLine();
QStringList lineToken = fileLine.split(",", QString::SkipEmptyParts);
//ignore commented lines
if(!fileLine.startsWith("#", Qt::CaseSensitive)){
for (int j = 0; j < lineToken.size(); j++) {
QString value = lineToken.at(j);
if(j == 0 && value == "TYPE_ES"){
vectorOfStrings.append(QStringList());
break;
}
if(vectorOfStrings.count() > 0)
vectorOfStrings[vectorOfStrings.count() - 1].append(value);
}
}
}
config_file.close();
}
}
。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QVector<QStringList> vectorOfStrings;
readFile(vectorOfStrings);
return a.exec();
}
您可以获得带有"TYPE_ES"的行之间的所有行。
相关文章:
- C++ 从文本文件中读取每两行,并且在矢量中是安全的
- 这两行代码有什么区别
- 矩阵中的内积两行C++与特征
- 使用 c++ 中的 getline 函数连续读取两行
- 一条线和两行声明之间的差异
- C 两次之间的时间差
- 为什么c中的一些函数名称用两行写
- 代码行在两行后不起作用
- 在两天之间获取交易天数
- 使用 Qt 获取 csv 文件中两行之间所有行
- 将两个数字替换为给定数组中介于两个之间的单个数字
- OpenCV中图像的以下两行有什么区别
- 如何在两个其他两个之间设置工具栏
- 最快的函数将位置设置为一个无符号整数中两个位之间的位
- Fstream 在两行后不会从文本文件中读取
- C++:如何在两行中为一个字符串和一个整数分配相同的输入
- SDL:程序运行正常;仅绘制两行像素
- 如何使用OpenCV计算两帧之间的旋转平移矩阵
- 使用Boost::units在两个量之间转换的最简单方法
- c++如何将文本文件中的一行拆分为两行,然后将每行存储到两个不同的数组中