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 fichier impossible


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut Lecture de fichier impossible
    Je suis face a un probleme de lecture fichier.

    Le contenu de celui ci est du binaire, lorsque je l'ouvre avec wordpad par exemple, je vois en clair une occurence qu'il me faut trouver, mais impossible de l'obtenir par mon programme. je le poste ci 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
    51
    52
    53
    54
    55
    56
    57
    58
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <sstream>
    using namespace std;
    template<typename T>
    bool from_string( const string & Str, T & Dest )
    {
        // créer un flux à partir de la chaîne donnée
        istringstream iss( Str );
        // tenter la conversion vers Dest
        return iss >> Dest != 0;
    }
     
    int main (int argc,char**argv)
    {
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        ifstream fichier( "TESTFILE.TXT" );
        std::ofstream out( "result.csv", std::ios_base::app );
     
        string ligne; // variable contenant chaque ligne lue
    	string carac;
    	int frameNbr=0,position=0;
    	int currentframeNbr=0,currentFrameCount=0;
     
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( getline( fichier, ligne ) )
            {
    			if (ligne.size() != 0 && ligne.find("sendNb :"))
    			{
    				position = ligne.find("sendNb :"); //recuper la position de la chaine de caracteres
    				position = position +8;				// se place apres les deux points
    				carac = ligne.at(position);			//recuper le caractere qui est forcement un nombre
     
    				if(!from_string(carac,frameNbr))	//tente la conversion
    				{
    					cout << "carac :"<<carac<<endl;		
    					cout << "no conv available"<<endl;
    				}
    				else
    				{
    					if (frameNbr != currentframeNbr)
    					{
    						out << currentframeNbr << ";"<< currentFrameCount;
    						currentFrameCount=0;
    					}
    					else currentFrameCount++;
    				}
    			}
            }
        }
    	else 
    		cout << "fichier introuvable"<<endl;
    	return 0;
    }

    voila le fichier de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                  ×   " 8 é           Ë            #   \\APC0038\API-FDX-2 V2 (268)\Port 1   Port1@10        
                                                                                                                       À@ @@       Æ   #B 0  €¢» poy‹    Æ  !  E     ¼
     
    !ÐÐ   
    ü  sendNb :1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ®Uén®"&„’i¯çóBXL´'—dØÿ¦ý`¢ÕÚ                                À@ À
    @         <   #B 0  €¢» À2z‹    <  !  E     ¼
     
    !ÐÐ   ü  sendNb :1
    Voici la sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    carac :
    no conv available
    carac :
    no conv available
    carac :
    no conv available
    Press any key to continue
    Quelqu'un aurait il une idée? Je crois comprendre qu'il s'agit d'une erreur de lecture due au format binaire de stockage, mais je suis incapable de récupérer ..... ce que je veux

    Je peux joindre le fichier texte si quelqu'un le veux pour tester... mais je ne peux pas le joindre sur ce topic, ... interdit par le firewall d'entreprise.

    Cdt

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    peut être parceque tu n'ouvre pas ton fichier en mode binaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ifstream fichier( "TESTFILE.TXT",std::ifstream::binary );

  3. #3
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Malheureusement non ca ne change rien.

    J'ai essayé avec les macros de la FAQ: http://c.developpez.com/faq/cpp/?pag...ERS_read_write

    Pas plus concluant.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par rikau2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ligne.size() != 0 && ligne.find("sendNb :"))
    Cette ligne semble douteuse, la fonction find renvoie une position, pas un booléen.

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Par défaut
    Bonjour

    Je trouve que l'utilisation de "getline" n'est pas vraiment adéquate, puisse qu elle attends un '\n'.

    Essayez voire avec ce code :

    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
     
    int main (int argc,char**argv)
    {
        // le constructeur de ifstream permet d'ouvrir un fichier en lecture
        ifstream fichier( "TESTFILE.TXT" );
    	std::ofstream out( "result.csv", std::ios_base::app );
     
        string ligne; // variable contenant chaque ligne lue
    	string carac;
    	int frameNbr=0,position=0;
    	int currentframeNbr=0,currentFrameCount=0;
     
        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
        {
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( getline( fichier, ligne ) )
            {
    			if (ligne.size() != 0 && (position = ligne.find("sendNb :"))!=-1)
    			{
     
    				position = position +8;				// se place apres les deux points
    				if(position > ligne.size())
    					continue;
    				carac = ligne.at(position);			//recuper le caractere qui est forcement un nombre
     
    				if(!from_string(carac,frameNbr))	//tente la conversion
    				{
    					cout << "carac :"<<carac<<endl;		
    					cout << "no conv available"<<endl;
    				}
    				else
    				{
    					if (frameNbr != currentframeNbr)
    					{
    						out << currentframeNbr << ";"<< currentFrameCount;
    						currentFrameCount=0;
    					}
    					else currentFrameCount++;
    				}
    			}
            }
        }
    	else 
    		cout << "fichier introuvable"<<endl;
    	return 0;
    }
    Cordialement

Discussions similaires

  1. [WD14] Lecture de Fichier xls impossible
    Par bruce207 dans le forum WinDev
    Réponses: 17
    Dernier message: 07/07/2011, 13h52
  2. Réponses: 2
    Dernier message: 12/05/2011, 19h11
  3. Réponses: 3
    Dernier message: 12/12/2006, 09h49
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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