Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : fin de fichier [ Linux / Fichier & Disque ] (poiuytrez3)

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é dans : fichier, string, file, filestream, getline


Répondre à ce message

Sujets en rapport avec ce message

conversion d'un string [ par bastiente ] Ba$t :bonjour... Voila je travaille sur un fichier ou figure la valeur : 32 989,88Je dois la retourner dan un autre fichier. Ca c'est fait, mai je doi Problème avec traitement de fichier (cplusplus !) [ par Sianrin ] Voila, j'explique mon problème. Pour voir un peu comment les accès au fichiers se géraient en cplusplus, je me suis mis en tête de faire un programme Enregistrer en HEXA un texte avec gcc !! [ par UncleShu ] /* * Ce programme affiche le fichier en HEXADECIMAL et se copie lui-même avec * une autre exetenstion (.txt). Moi je voudrais qui affiche le fichier * Petit probleme de code en C sur Linux !! [ par UncleShu ] Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM Renommer un fichier [ par mindark ] Bonjour, j'essaie tout betement de renommer un fichier a l'aide des api, mais ca ne marche pas !Je veux renommer "kk.txt" en "qq.txt"String ancien="C: ouverture de fichier avec les MFC [ par steph76 ] Bonjourvoila je programme une application qui ha beusoin d'ouvrir 1 fichier via httpJ'ai donc fait le code suivantCStdioFile *file;CInternetSession IS Mettre un fichier .exe dans un buffer [ par guiguikun ] Je n'arrive pas a mettre un fichier executable en memoire.sur les 100Ko du fichier, mon buffer ne compte que les 3 premiers octets (caracteres)voici m rechercher une string dans un fichier sous windows [ par doudblast ] voilà : l'idée est de récuperer une ip dans un fichier txtpar contre cette ip ne sera pas toujours la même et ne sera pas toujours précisemment au mêm Pb de gestion de fichier avec fstream [ par Bub325 ] Salut,J'ai deux problème distinct avec fstream, Le premier est que lorsque j'arrive à la fin d'un fichier, je ne peut plus revenir plus haut dans ce d boite de dialogue en C [ par benhamid ] Bonjour, J'ai quelque problème en C, pouvez vous m'aider svp.J'ai des fonctions C suivantes: lecturefichier(FILE * f1) qui lit le fichier f1calcul( Fi


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.