Some difficulties encountered
-
I'm trying to clean up a very poorly organized database. I can't understand my mistakes (I'm a beginner) :
while (!file.atEnd()) { const QString ligneEnCourDeLecture = QString::fromLatin1(file.readLine()); QString ligneEpuree = ligneEnCourDeLecture; numeroDeLaligneAnalysee++; QStringList denominationDeChaqueResident; if(ligneEnCourDeLecture.left(4) == "Mme." || ligneEnCourDeLecture.left(2) == "M.") { numeroDuResident++; denominationDeChaqueResident.append(QString::number(numeroDeLaligneAnalysee)); denominationDeChaqueResident.append(QString::number(numeroDuResident));
///////////////////////////////////////////////////////////////////////////////////////////////////// Don't WORK
if(ligneEnCourDeLecture.contains("née"))
ligneEpuree = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("née"));
if(ligneEnCourDeLecture.contains("(H)"))
ligneEpuree = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("(H)"));
if(ligneEnCourDeLecture.contains("(F)"))
ligneEpuree = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("(F)"));
if(ligneEnCourDeLecture.contains("[NIR]"))
ligneEpuree = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("[NIR]"));ligneEpuree = ligneEpuree.simplified(); ligneEpuree = ligneEpuree.trimmed(); qDebug()<<"Ligne épurée avant traitement : " << ligneEpuree; QStringList Temp001 = ligneEnCourDeLecture.split(" "); for (int i = 0 ; i < ligneEnCourDeLecture.size() ; i++) { if (Temp001.at(i) == "Mme.") denominationDeChaqueResident.append("Mme."); if (Temp001.at(i) == "M.") denominationDeChaqueResident.append("M."); qDebug()<< "denominationDeChaqueResident après Madame Monsieur : " << denominationDeChaqueResident; qDebug()<< "Ligne de début : " << ligneEnCourDeLecture; qDebug()<< "Ligne de fin : " << ligneEpuree; qDebug()<< "Dénomination de chaque résident : " << denominationDeChaqueResident; } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
I don't understand ;) -
@JonB For example this :
if(ligneEnCourDeLecture.contains("(F)"))
ligneEpuree = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("(F)"));qDebug()<<"Ligne épurée avant traitement : " << ligneEpuree;
Ligne épurée avant traitement : "Mme. XXXX Marie (F) 2245204022001 23 [NIR] (Décès 2023);;;"
Normaly, ligneEpuree must contains Mme. XXXX Marie not ?
Thank you for healping !
-
@lambe
Yes, if you execute just that code, andMme. XXXX Marie (F) ...
does not contain a(F)
in where you writeXXXX
, thenligneEpuree
will beMme. XXXX Marie
.Put
qDebug()
statements in so you seeligneEnCourDeLecture
,ligneEpuree
and also the result ofligneEnCourDeLecture.indexOf("(F)")
on its own so the output shows just what is going on. -
@JonB Thanks JonB it's work now !!!
I'am a very bad programmer ;)
QFile file(QString(QApplication::applicationDirPath() + "/STMartin/Traitement/Traitement et contention.csv")); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::critical(this, tr("Je ne trouve pas le fichier "), tr("")); return; } int numeroDeLaligneAnalysee = -1; int numeroDuResident = -1; while (!file.atEnd()) { const QString ligneEnCourDeLecture = QString::fromLatin1(file.readLine()); QString ligneATravailler = ligneEnCourDeLecture; QStringList denominationDeChaqueResident; numeroDeLaligneAnalysee++; denominationDeChaqueResident.append(QString::number(numeroDeLaligneAnalysee) + ";"); if(ligneEnCourDeLecture.left(4) == "Mme." || ligneEnCourDeLecture.left(2) == "M.") { numeroDuResident++; denominationDeChaqueResident.append(QString::number(numeroDuResident) + ";"); if(ligneEnCourDeLecture.contains("(F)")) { ligneATravailler = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("(F)")); } if(ligneEnCourDeLecture.contains("(H)")) { ligneATravailler = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("(H)")); } if(ligneEnCourDeLecture.contains("née")) { ligneATravailler = ligneEnCourDeLecture.left(ligneEnCourDeLecture.indexOf("née")); } while(ligneATravailler.contains(",")) ligneATravailler.remove(","); while(ligneATravailler.contains("-")) ligneATravailler.remove("-"); ligneATravailler = ligneATravailler.simplified(); ligneATravailler = ligneATravailler.trimmed(); QStringList civiliteNomEtPrenom = ligneATravailler.split(" "); QString civilite; if(civiliteNomEtPrenom.at(0) == "Mme.") { civilite = "F"; civiliteNomEtPrenom.takeFirst(); } if(civiliteNomEtPrenom.at(0) == "M.") { civilite = "H"; civiliteNomEtPrenom.takeFirst(); } denominationDeChaqueResident.append(civilite + ";"); QString listNom; QString listPrenom; for (int i = 0 ; i < civiliteNomEtPrenom.size() ; i++) { QRegularExpression nom("[A-Z][A-ZÉ\s]"); QRegularExpressionMatch matchNom = nom.match(civiliteNomEtPrenom.at(i)); if (matchNom.hasMatch()) { listNom.append(civiliteNomEtPrenom.takeAt(i)); } QRegularExpression prenom("^[A-Z][a-z]*$"); QRegularExpressionMatch matchPrenom = prenom.match(civiliteNomEtPrenom.at(i)); if (matchPrenom.hasMatch()) { listPrenom.append(civiliteNomEtPrenom.takeAt(i)); } } if(!civiliteNomEtPrenom.isEmpty()) { QMessageBox::critical(this, tr("civiliteNomEtPrenom n est pas vide. Il reste cela"), civiliteNomEtPrenom.first()); return; } denominationDeChaqueResident.append(listNom + ";"); denominationDeChaqueResident.append(listPrenom + ";"); qDebug()<< "denominationDeChaqueResident" << denominationDeChaqueResident; } }