兩個特定的行之間的所有行,我用下面的代碼讀取QT csv文件:獲取csv文件使用Qt
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並實現此目標?
如果您想要以「一串」或不同格式提取數據,則可能不應該使用QStandardItemModel,如果要在網格和樹中顯示數據並且希望輕鬆地進行操作,模型視圖體系結構非常棒,如果你想在組中使用數據,可以保持靈活性,也許你應該使用標準容器並按照你想要的方式存儲數據,從我理解的我將使用QMap>>或類似的東西。 –
Marco
QStringList @Marco – smyslov