Help code lecture/écriture et recherche de suites de caractères [Résolu/Fermé]

Signaler
-
Messages postés
2995
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
5 mai 2019
-
Bonjour à tous,

J'ai un petit souci avec un code C++, je vous expose mon problème :
J'ai un très gros fichier (4.5 Go) à analyser. Il est simplement composé d'une ligne d'introduction, puis de deux colonnes sur x lignes.
La phrase d'introduction ne m'intéresse absolument pas. Par contre les lignes suivantes représentent un temps (très précis) auquel est associé une valeur booléenne.

Je créé un programme pour analyser ce fichier car il est trop gros et impossible à lire à la main.
Mon code consiste à lire dans ce fichier et à calculer le temps pendant lequel on a une suite de "0". Il peut y avoir plusieurs suites de "0".

Voici mon code :
#include <fstream> //inclusion de la bibli pour lire un fichier
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{

ifstream fichier("FichierAAnalyser.txt", ios::in);
int nombreDef = 0;
string debutTempsDef[1000];
string finTempsDef[1000];
int i = 0;

if(fichier) // si l'ouverture a réussi

{
fstream resul("dispo.txt", ios::out | ios::trunc);
fstream fichierDef("def.txt", ios::out | ios::trunc);
string ligne;

while(getline(fichier, ligne)) // tant que l'on peut mettre la ligne dans "contenu"
{
string entete1;
string entete2;
string temps;
string dispo;

fichier >> entete1 >> entete2 >> temps >> dispo;
cout << entete1+"\n";
cout << entete2+"\n";
cout << temps+" \n";
cout << dispo;

if(resul)
{
resul << temps << " " << dispo << "\n";
if (dispo.compare("0") == 0){
nombreDef = nombreDef + 1;
i = i + 1;
debutTempsDef[i] = temps;

if(fichierDef){
fichierDef << "Début de la défaillance : " << debutTempsDef[i] << " Fin de la défaillance : " << finTempsDef[i] << "\n";
}

}
while (dispo.compare("0") == 0){}

finTempsDef[i] = temps;

}
}
}
}


Mon deuxième "while" sert à parcourir les lignes tant qu'il y a des zéros. Une fois que je sors de cette boucle, cela signifie que mon temps sera associé à un 1. Je recherche alors une autre suite de "0"...

J'arriver bien à lire dans mon fichier à analyser, par contre, les suites de "0" ne s'enregistre pas dans mon fichier def.txt.


Quelqu'un aurait une idée svp ?

Merci de m'avoir lu.

1 réponse

J'ai finalement réussi à résoudre mon problème :
Il y avait plusieurs soucis, mais le plus gros venait de mon "while()" à la fin.

Voilà mon code final :

#include <fstream> //inclusion de la bibli pour lire un fichier
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>

using namespace std;
  
int main()
{		

        ifstream fichier("ProjetBH-TopologieDefaillanteRmodif.txt", ios::in); 
		int nombreDef = 0;
		string debutTempsDef[1000];
		string finTempsDef[1000];
		int i = 0;
		int testPair = 1;
		bool def = 0;

        if(fichier)
        {  
			fstream resul("dispo.txt", ios::out | ios::trunc);
			fstream fichierDef("def.txt", ios::out | ios::trunc);
			string ligne;

			while(getline(fichier, ligne))  
			{
		
				string entete1;
				string entete2;
				string temps;
				string dispo;

				fichier >> temps >> dispo; 

				if (testPair%2 == 0)
				{
					if(resul)
					{
						resul << temps << " " << dispo << "\n";
			
						if (dispo.compare("0") == 0)
						{
							if(def == 0)
							{
							nombreDef = nombreDef + 1;
							i = i + 1;
							debutTempsDef[i] = temps;
				
							if(fichierDef)
							{
								fichierDef << "Début de la défaillance : " << debutTempsDef[i] << " Numéro de défaillance : " << nombreDef << "\n";
							}

							def = 1;
							}
							
						}
			
						if (dispo.compare("1") == 0)
						{	
							if(def == 1)
							{
								finTempsDef[nombreDef] = temps;
								fichierDef << "Fin de la défaillance numéro: " << nombreDef << " au temps : " << finTempsDef[nombreDef] << "\n";
							}
							def = 0;
						}
					}
				}

				testPair = testPair + 1;
			}
		}
}

		


Si quelqu'un a des questions j'y répondrai sans problème, car je n'ai pas détaillé tout l'étendu de mon fichier à analyser et le problème exact.

Merci quand même.
Messages postés
2995
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
5 mai 2019
296
Lu'

Tu peu poster la solution des fois que ça intéresse quelqu'un :)
>
Messages postés
2995
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
5 mai 2019

Merci à vrai dire j'avais hésité ! C'est fait :)
Messages postés
2995
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
5 mai 2019
296 > Benoît
Merci :)

En effet la logique qui ressort du deuxième code est bien meilleure :]
J'allais te proposer de faire un seul while avant que je ne vois que tu avais déjà trouvé la solution :)

Beau boulot !