Je suis en train de suivre le fichier attaché 1.txt.Erreur qlist lors de l'exécution de qprocess dans une boucle
a) lire une liste b) pour chaque élément dans la liste c) exécuter un processus externe enregistrer dans un fichier d) lire un fichier, sauf modification dans le fichier de B e) thatz il
et une erreur de suivi se produit.
échec ASSERT dans QList: pérateur []: "indice hors de portée", fichier /opt/qtsdk-2009.02/qt/include/QtCore/qlist.h, ligne 403
2.txt est une instance du fichier 1.txt (pas de boucle) et il fonctionne avec succès.
Comment est-il possible d'exécuter la boucle avec succès en modifiant le fichier. Veuillez suggérer avec un exemple. Ça va aider. PS: vous aurez besoin du fichier queue_output.txt dans le dossier tmp pour exécuter ce code.
1.txt
#include <QtCore/QCoreApplication>
#include <QRegExp>
#include <QProcess>
#include <QDebug>
#include <QTemporaryFile>
#include <QDir>
int main(int argc, char *argv[])
{
// int ret = 0;
QString projNm = "edisni";
QCoreApplication app(argc, argv);
QStringList arguments;
QString queue;
QStringList queueList;
QTextStream out;
// ---------------------------------------------
// till here i get a list of queues in queueList
// ---------------------------------------------
QFile file("/tmp/queue_output.txt");
if(file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
queue = in.readAll();
}
file.close();
queueList = QString(queue).split("\n");
if (QString(queueList.last()).isEmpty())
queueList.removeLast();
// ----------------------------------------------
// for each item in queueList run an external command
// store output in _XXXXXX
qDebug() << "length of queue" << queueList.length();
for(int i =0; i < queueList.length();i++)
{
QProcess *procQueueContent = new QProcess();
QString lineWithoutSlashAnne_02;
QTemporaryFile *tFile = new QTemporaryFile(QDir::tempPath()+ "/" + queueList[i] + "_XXXXXX");
tFile->open();
QFile pFile("/tmp/queue_content_output.txt");
pFile.open(QIODevice::WriteOnly);
procQueueContent->setStandardOutputFile(tFile->fileName());
procQueueContent->setStandardErrorFile("/tmp/queue_content_error.txt");
arguments << "-sq" << queueList[i];
procQueueContent->start("qconf",arguments);
procQueueContent->waitForReadyRead();
procQueueContent->waitForFinished();
tFile->close();
tFile->open();
QTextStream out(&pFile);
QString line;
// ---------------------------------------------
// find word projects in the file, add a word at end
// save output in queue_content_output
// ---------------------------------------------
while(!tFile->atEnd())
{
line = tFile->readLine();
QStringList lineWithoutSlashAnne_01 = QString(line).split("\n");
lineWithoutSlashAnne_02 = lineWithoutSlashAnne_01[i];
if (lineWithoutSlashAnne_02.contains(QRegExp("^projects")))
{
lineWithoutSlashAnne_02.append(" "+projNm);
// come a line back remove the project line and add this line
qDebug() << "project " << lineWithoutSlashAnne_02;
}
out << lineWithoutSlashAnne_02 << endl;
}
tFile->close();
pFile.close();
arguments.clear();
}
return app.exec();
}
2.txt
#include <QtCore/QCoreApplication>
#include <QRegExp>
#include <QProcess>
#include <QDebug>
#include <QTemporaryFile>
#include <QDir>
#include <iostream>
int main(int argc, char *argv[])
{
// int ret = 0;
QString projNm = "edisni";
QCoreApplication app(argc, argv);
QStringList arguments;
// ---------------------------------------------
// till here i get a list of queues in queueList
// ---------------------------------------------
QString queue;
QStringList queueList;
QFile file("/tmp/queue_output.txt");
if(file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
queue = in.readAll();
}
file.close();
queueList = QString(queue).split("\n");
if (QString(queueList.last()).isEmpty())
queueList.removeLast();
// ---------------------------------------------
// for only first item in queueList[0] run external comm
// ---------------------------------------------
QProcess *procQueueContent = new QProcess();
QString lineWithoutSlashAnne_02;
QTemporaryFile *tFile = new QTemporaryFile(QDir::tempPath()+ "/" + queueList[0] + "_XXXXXX");
tFile->open();
QFile pFile("/tmp/queue_content_output.txt");
pFile.open(QIODevice::WriteOnly);
procQueueContent->setStandardOutputFile(tFile->fileName());
procQueueContent->setStandardErrorFile("/tmp/queue_content_error.txt");
arguments << "-sq" << queueList[0];
procQueueContent->start("qconf",arguments);
procQueueContent->waitForReadyRead();
procQueueContent->waitForFinished();
tFile->close();
tFile->open();
QTextStream out(&pFile);
qDebug() << "pFIle " << &pFile;
QString line;
while(!tFile->atEnd()) // add a condition to restrict traversing thru file only once
{
line = tFile->readLine();
QStringList lineWithoutSlashAnne_01 = QString(line).split("\n");
lineWithoutSlashAnne_02 = lineWithoutSlashAnne_01[0];
if (lineWithoutSlashAnne_02.contains(QRegExp("^projects")))
{
lineWithoutSlashAnne_02.append(" "+projNm);
qDebug() << "project " << lineWithoutSlashAnne_02;
// come a line back remove the project line and add this line
}
out << lineWithoutSlashAnne_02 << endl;
}
tFile->close();
pFile.close();
arguments.clear();
return app.exec();
}
queue_output.txt:
all.q
eqws-069.q
grid.q
grid1.q
grid3.q
test.1.q
L'avez-vous exécuté à l'aide d'un débogueur et trouvé lorsque vous sortez de l'index, c'est-à-dire où les choses vont mal dans votre code? – e8johan
Savez-vous que vous pouvez créer des fonctions et des classes en C++ pour structurer votre code ... – TimW