begin process at 2012 02 12 01:09:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Fichier & Disque

 > 

fin de fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fin de fichier

jeudi 29 novembre 2007 à 00:59:24 | fin de fichier

poiuytrez3

Membre Club
Bonjour,
Je suis en train de faire un programme qui lit des informations dans un fichier, mais je ne comprends pas, il me prend 2 fois le dernier élément.
Merci de votre aide
Voici le fichier:  
Milk
2.5
3.4
456
Butter
1.5
2.5
123

PS : Le fichier s'arrête juste derrière le 123.

Et voici le code

void ProductsManager::deserialize(char* fileName)
{
    ifstream fileStream;
    fileStream.open(fileName);
   
    // If the file has been correctly opened
    if(fileStream)
    {
        cout << "fichier opened" << endl;
        getchar();
        string name;
        string buyingPrice;
        string sellingPrice;
        string quantity;
       
        double dBuyingPrice, dSellingPrice;
        int iQuantity;
       
        // For each product
        while(!fileStream.eof())
        {
            getline(fileStream, name);
            getline(fileStream, buyingPrice);
            getline(fileStream, sellingPrice);
            getline(fileStream, quantity);
           
            stringstream(buyingPrice) >> dBuyingPrice;
            stringstream(sellingPrice) >> dSellingPrice;
            stringstream(quantity) >> iQuantity;
                       
            cout << "dBuyingPrice : " << dBuyingPrice << endl;
           
            Product temp(name, dBuyingPrice, dSellingPrice, iQuantity);
            this->push_front(temp);
           
            getchar();getchar();
           
           
        }
       
        fileStream.close();
       
    }
    else
    {
        // the file has not been opened correctly
        throw "The file has not been opened correctly";
    }
   
}



-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne
jeudi 29 novembre 2007 à 08:26:52 | Re : fin de fichier

luhtor

T'as surement un caractère comme "passage à la  ligne" a la fin de ton fichier, si bien que toi, tu crois etre a la fin, et en fait, il existe encore quelques caractères. La facon d'éviter ca est de faire le test ligne par ligne et non par bloc de 4 lignes.
jeudi 29 novembre 2007 à 13:08:31 | Re : fin de fichier

ndubien

Membre Club

Bonjour,

Voici une petite fonction qui je l'espè-re pourra t'aider:
void ouvrir(string &phrase) {
 cout <<"\n\nNom du fichier a analyser : ";
 string nom_fichier;
 getline(cin,nom_fichier);
 ifstream fichier(nom_fichier.c_str());
 if (!fichier) {
  cout <<"Erreur, fichier corrompu ou inexistant !\n\n";
  phrase = "Erreur, fichier corrompu ou inexistant !";
 } else {
  stringstream buffer;
  buffer << fichier.rdbuf();
  fichier.close();
  phrase = buffer.str();
 }
}

Seul prblème ne pas mettre le carractère ASCII n°26 (SUB) dans le contenu u fichier, sinon la fonction fini la lecture du fichier. Normallement elle devrait fonctionner ;)

A bientôt...


Nico

jeudi 29 novembre 2007 à 13:10:35 | Re : fin de fichier

ndubien

Membre Club

Cette fonction permet juste de lire un fichier, il ne vous reste plus qu'à l'adapter à votre problème ou a vous en servir telle-qu'elle.
A+

jeudi 29 novembre 2007 à 16:17:44 | Re : fin de fichier

luhtor

Meme si le code de poiuytrez3n'est pas du tout optimisé et sera très lent pour de très gros fichier, le pb n'est pas au niveau de l'ouverture mais de la lecture. Elle est correcte, mais elle ne traite pas les cas critiques.

Juste une remarque, perso, j'utilise pas les stringstream, puisque dans ton cas, ce sont les istringstream qui répondent exactement au besoin. Enfin ca change pas grand chose.
istringstream(quantity) >> iQuantity;

Etant donné le coût de ces objets, tu devrais  essayer d'utiliser un seul object pour tes trois opérations.

Donc  ndubien je ne vois pas pk tu postes un truc qui n'a pas de rapport avec son pb :)
jeudi 29 novembre 2007 à 17:58:04 | Re : fin de fichier

ndubien

Membre Club

Et bien, si j'ai bien compris ilse demandait pourquoi son code ouvrait deux la dernière ligne du fichier...
N'est-ce pas?
Sa méthode d'ouverture ne fonctionnait donc pas:
   donc je lui en ai proposé une autre
Ceci n répond-il pas à sa question?
Certes pas pour le pourquoi mais celà lui donne une autre méthode pour ouvrir des fichiers...
Si je ne répond en aucun cas à sa question originale, qu'elle est sa question?

vendredi 30 novembre 2007 à 00:01:59 | Re : fin de fichier

poiuytrez3

Membre Club
Salut luthor,
Comment puis-je savoir si il y a ce fameux caractère "passage à la ligne" ?
Pourtant le fichier est censé se terminer derrière le 123 sans aller à la ligne.

Merci de ton aide.


-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne
vendredi 30 novembre 2007 à 00:17:25 | Re : fin de fichier

luhtor

Réponse acceptée !
ndubien bas si elle fonctionne puisqu'il arrive a ouvrir le fichier.

poiuytrez3Bas, tu peux considérer que si il y a une ligne vide, alors soit il y a une erreur dans le fichier soit on atteint la fin. Dans les deux cas, on s'arrete:

        while(!fileStream.eof())
        {
            getline(fileStream, name);
            getline(fileStream, buyingPrice);
            getline(fileStream, sellingPrice);
            getline(fileStream, quantity);

            if (name.empty() || buyingPrice.empty() ||... etc)
            {
                      break;
            }
           
            stringstream(buyingPrice) >> dBuyingPrice;
            stringstream(sellingPrice) >> dSellingPrice;
            stringstream(quantity) >> iQuantity;


Ou un peu plus élégant :
while (!getline(fileStream, name).eof() && !getline(fileStream, buyingPrice) && !...)
{
    istringstream(buyingPrice) >> dBuyingPrice;
    ...
}

Ou encore: (à tester, normalement il n'y a pas de soucis)
while (getline(fileStream, name) && getline(fileStream, buyingPrice) && ...)
{
   istringstream(...
vendredi 30 novembre 2007 à 00:49:59 | Re : fin de fichier

poiuytrez3

Membre Club
Ok merci pour ta solution, j'ai utilisé la technique du break.

@+ !

-----------------------------------------------------------------------------------
http://www.mesdevoirs.net -- Corrections de devoirs de mathématiques en ligne


Cette discussion est classée dans : fichier, string, file, filestream, getline


Répondre à ce message

Sujets en rapport avec ce message

HELP - - getline string char conversion de types?? [ par gregroar ] //je teste dans une console la fonction getline, que je trouve suffisament rapide. //cependant je me retrouve confronté à des problemes de conversion les class [ par snpier wolf ] bonjour voila j'ais commancer un peux a programmé avec les class.et j'ais un problème que je n'arrive pas à résoudre.voila le bou de codeclass command Problème pour stoker une string dans un char* [ par Faroww ] Salut, Alors voici mon problème j'utilise une OpenFileDialog (Parcourir)pour permette a l'utilisateur de choisir un fichier. Je récupéré le patch du C dup utilisation [ par Tom59247 ] Bonjour à tous ! Je réalise actuellement un petit programme qui me permet de mettre quelques infos dans un fichier txt. Après quelques recherches j' (win32)Fichier et buffer en lecture seule [ par mogwai93 ] Bonjour Je voudrais lire un fichier, placer le contenu de ce fichier dans un buffer et modifier ce buffer (mais pas le fichier). J'arrive bien à ou Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine [ par curite ] Bonjours, j'ai créer un gestionnaire de mot de passe en c++ je vous montre le code sinon vous allez rien comprendre :p main.cpp [code=cpp] #include Enregistrer un type string dans un fichier [ par jeromenaze ] Bonjour, J'ai un problème j'ai rechercher un peut partout mais je suis débutant en programmation donc j'aimerai des explication. Voila je veut enregis Problème écriture fichier avec fputs et chaine créée avec l'objet string [ par curite ] Bonjours, j'ai un problème, je n'arrive pas a écrire dans un fichier avec fputs en mettant un chaine de caractère créée avec l'objet string, voici le enregister un fichier depuis les ressources [ par baby3378 ] Bonjour à tous, Voilà, afin de faciliter l'utilisation d'une application j'ai décidé de stocker les images et dll en ressource dans mon application af Exception anormale lors d'un substr C++ [ par LeaIUT ] Bonsoir, lors de l'execution de mon programme, une exception me stoppe la progression: "terminate called after throwing an instance of 'std::out_of_r


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,362 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales