Vous allez surement me prendre pour un fou, mais voila mon problème :
J'ai un fichier de 2 Mo constitué comme ceci :
Donc en gros :Ceci est le texte numéro 33454
Dumque ibi diu moratur commeatus opperiens, quorum translationem ex Aquitania verni imbres solito crebriores prohibebant auctique torrentes, Herculanus advenit protector domesticus, Hermogenis ex magistro equitum filius, apud Constantinopolim, ut supra rettulimus, populari quondam turbela discerpti.
-- http://monsite.com/33454.html
%
Ceci est le texte numéro 33412
Itaque tum Scaevola cum in eam ipsam mentionem incidisset, exposuit nobis sermonem Laeli de amicitia habitum ab illo secum et cum altero genero, C. Fannio Marci filio, paucis diebus post mortem Africani. Eius disputationis sententias memoriae mandavi, quas hoc libro exposui arbitratu meo; quasi enim ipsos induxi loquentes, ne 'inquam' et 'inquit' saepius interponeretur, atque ut tamquam a praesentibus coram haberi sermo videretur.
-- http://monsite.com/33412.html
%
Etc ...
-Texte
-Lien contenant l'ID du texte
-% (séparateur)
En temps normal, mon programme, à l'aide du code ci-dessous, calcule le nombre de %, en choisit un au hasard et affiche le texte qui se trouve en dessous :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 int count_nb_quotes = 0; QFile file("fortunes.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::information(this, "Erreur", "Erreur à l'ouverture du fichier"); } else { //On compte le nombre de quotes QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); if (line == "%") count_nb_quotes++; } file.reset(); //Permet de remettre les flags du fichier à zéro, la lecture recommence au début. int ligneQuoteChoisie = nombreAleatoire(count_nb_quotes-1); QString mot; int count = 0; //On positionne le curseur au bon endroit QString osef; while (count < ligneQuoteChoisie) { osef = in.readLine(); if (osef == "%") count++; } QRegExp dtcExp ("^-- http://monsite.com/"); QString lignelue; while (lignelue != "%") { lignelue = in.readLine(); if ((lignelue != "%")&&(!lignelue.contains(dtcExp))) //Si la ligne ne contient ni l'URL ni le séparateur, on l'affiche textEditQuote->append(htmlspecialchars(lignelue)); if (lignelue.contains(dtcExp)) { uint taille = lignelue.length(); //Taille de l'ID (on enleve les 26 premiers caractères et les 5 ".html") QString idQuote = lignelue.mid(26, taille -31); //On vire les 26 permiers caractères et les 5 de la fin QString urlQuote = lignelue.mid(3, taille); //On vire les 3 premiers caractères labelIDQuote->setText("<a href='" + urlQuote + "'>#" + idQuote + " (Voir les commentaires)</a>"); //On marque l'ID de la quote } } file.close(); } }
Donc je voudrais que lorsque l'utilisateur rentre un nombre (ex : 763) le programme cherche la ligne http://monsite.com/763.html, si elle n'existe pas, le lui signale (ça je sais faire) et enfin remonte le curseur jusqu'au % précédent et relise le fichier jusqu'au % d'après donc.
Plus clair :
ETAPE 0 : l'utilisateur rentre "763"
texte
-- http://monsite/812
% ETAPE 2 : Il remonte à ce %
texte ETAPE 3 : il lit ce texte
-- http://monsite/763 ETAPE 1 : Le prog tombe la dessus
%
Donc là c'est surtout l'étape 2 qui me pose problème
Partager