IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Lecture de deux fichiers en même temps


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Lecture de deux fichiers en même temps
    Bonsoir,
    j'ai un probleme concernant les ifstream...
    J'ai deux fichiers contenant des informations que je veux comparer à la suite.
    Ces informations sont de type int, et il y a environ plus de 400 000 int à comparer entre les deux fichiers.
    J'ai essayé d'initialiser un tableau de 400 000 int, à 0, mais bloquage de l'executable.
    J'ai en effet voulu tout lire un fichier dans un premier temps, et repertorier tout les int dans un premier tableau de taille 400 000.
    De meme avec le deuxieme fichier, avec un second tableau de meme taille.

    Apres cela, j'ai voulu comparer chacun leur tour, mais impossible car je n'ai pas reussi a créer les deux tableaux.
    Les deux fichiers sont disposés exactement de la meme maniere. A savoir :
    Par exemple :
    (0,1,2,3)(4,5,6,7)(8,9,10,11) dans le premier fichier
    (12,13,14,15)(16,17,18,19)(16,17,18,19) dans le second fichier

    Je veux ainsi comparer 0 a 12, 1 a 13, etc.... 11 a 19.



    J'ai pensé a une autre idée qui consistait d'y aller 1 par 1.

    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
            int tab0 = 0;
        int tab1 = 0; 
        ifstream text0("fire1_frame_0.txt");
        ifstream text1("fire1_frame_0.txt");  
    	while ( !text0.eof() && !text1.eof() )
    	{
    	    text0 >> i0;
    	    text1 >> i1;
    	    if (text0.fail())
    	    {
                    text0.clear();
                    text0 >> c;
    	    }  
            else 
    	    {
    	        tab0=i0;
            }        
            if (text1.fail())
             {
                  text1.clear();
                  text1 >> c;
             }  
            else 
             {
                  tab1=i1;
             }
     
       // On va comparer les deux tableaux
     
       if ( abs(tab0-tab1 > seuil) )
          {
                          OK = 1;
          }
       else 
          {
                          OK = 0;
          }
       ofstream temporelle("temporelle.txt",ios::app);
       temporelle << OK;
       temporelle.close();
       cout << "suivant..."<<endl;      
     
       } // ferme le double while
       text0.close();
       text1.close();

    Cela marche bien, MAIS comme vous le savez, avec 400 000 comparaisons a faire cela est très long !!
    Si vous pourriez m'aider a trouver l'erreur, ou proposer une autre solution...Je vous en serez reconnaissant, merci !!

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    sans le code c'est dur.
    As tu alloué tes tableaux dynamiquement?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int * tab1 = new int[400000];
    int * tab2 = new int[400000];
    .
    .
    .
    delete [] tab1 ;
    delete [] tab2 ;
    sinon tu peut utiliser les vector pour charger tes donné en memoire.

    Si tu n'as pas besoin de les avoir en memoire, ton code es bien,
    mais change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ofstream temporelle("temporelle.txt",ios::app);
       temporelle << OK;
       temporelle.close();
    ouvre et ferme ce fichier avec les autres stream.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Voici le code avec allocation dynamique. Il fonctionne mais toujours lent...On ne peut plus rapide?


    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
        int taille = 0;
        int width = 0;
        int lenght = 0;
    	char c; 
        int i0 = 0; 
        int j0 = 0;
        int i1 = 0; 
        int j1 = 0;
        int OK = 0;
        int seuil = 10;
        cout << "Entrer le width puis le lenght : ";
        cin >> width;
        cin >> lenght;
        taille = 4 * width * lenght;
        int *tableau1 = new int[taille];
        int *tableau2 = new int[taille];  
        ifstream text0("forest2_frame_0.txt");
        ifstream text1("forest2_frame_1.txt");  
    	while ( !text0.eof() && !text1.eof() )
    	{
    	    text0 >> i0;
    	    text1 >> i1;
    	    if (text0.fail())
    	    {
                 text0.clear();
                 text0 >> c;
    	    }  
            else 
    	    {
    	        tableau1[j0]=i0;
    	        j0++;
            }        
            if (text1.fail())
             {
                  text1.clear();
                  text1 >> c;
             }  
            else 
             {
                tableau2[j1]=i1;
                j1++;
             }
        } // ferme le double while
       text0.close();
       text1.close();
     
       // On va comparer les deux tableaux
     
    for (int k=0;k<=taille;k++)
    {   if ( abs(tableau1[k]-tableau2[k] > seuil) )
          {
                          OK = 1;
          }
       else 
          {
                          OK = 0;
          }
       ofstream temporelle("temporelle.txt",ios::app);
       temporelle << OK;
       temporelle.close();
       cout << "suivant..."<<endl;      
    }      
     
    delete [] tableau1;
    delete [] tableau2;

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    change ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       ofstream temporelle("temporelle.txt",ios::app);
       temporelle << OK;
       temporelle.close();
    tu ouvre et tu ferme un fichier a chaque iteration.
    ouvert et ferme ce fichier en même temps que les deux autres

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/08/2012, 16h44
  2. Lire deux fichiers en même temps
    Par forest.y dans le forum VBScript
    Réponses: 6
    Dernier message: 10/08/2011, 01h29
  3. Lire deux fichiers en même temps
    Par Carlozi dans le forum Langage
    Réponses: 23
    Dernier message: 31/07/2008, 13h19
  4. Voir deux fichier en même temps ?
    Par dr23fr dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/09/2006, 12h11
  5. Lancer deux sons en même temps...
    Par Julien_riquelme dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 03/05/2003, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo