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 :

Fonction putline?


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Fonction putline?
    Salut!

    Je fais un programme de cryptage bidon dans lequel chaque lettre d'un fichier est remplacée par son code ascii:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Crypto::crypting(){
                            cout<<"begin"<<endl;
                            cout<<"opening file : ";
                            std::ifstream file(fileName.c_str());
                            (file) ? cout<<"success"<<endl : cout<<"error"<<endl;
                            string line;
                            while(getline(file,line)){
                                                      for(int i=0;i<line.length();i++){
                                                                                       static_cast<int> (line[i]);               
                                                                                       }
                                                      /*ici il faut "remettre la ligne en place".*/
                                                      }
                            }
    Après que la ligne "line" a été "codée" j'aimerais la placer dans le fichier "file" à l'emplacement de la ligne originale.
    Je ne vois pas comment faire et me demandait si il n'existait pas une fonction pratique qui le ferait.

    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu ne peux pas modifier un fichier que tu es en train de parcourir en lecture.
    Par contre tu peux très bien stocker le résultat dans un buffer / fichier temporaire, et faire le remplacement à la fin en un coup.

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Alors je traite tout en stockant dans un vector de string par exemple, puis je met le tout dans le fichier en "ouvrant" dessus un flux ofstream?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est ça.

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Voilà ce que j'ai fait:

    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
    void Crypto::crypting(){
                            cout<<"begin"<<endl;
                            cout<<"opening file : ";
                            std::ifstream file(fileName.c_str());
                            (file) ? cout<<"success"<<endl : cout<<"error"<<endl;
                            string line;
                            vector<string> buffer;
                            while(getline(file,line)){
                                                      for(int i=0;i<line.length();i++){
     
                                                                                       if(line[i]!='\n'){ line[i]+=1;};
     
                                                                                       }
                                                      buffer.push_back(line);
                                                      //cout<<line<<endl;
                                                      //system("pause");
                                                      }
                            file.close();
                            std::ofstream file2(fileName.c_str());
                            for(int i=0;i<buffer.size();i++){
                                                               file2<<buffer[i]<<endl;
                                                               }
                            file2.close();
                            }
    Ca marche parfaitement mais y a t'il un moyen de faire cela plus élégamment?

    Je me permet d'ajouter une question qui n'est pas en lien direct avec le post:
    quel est l'intérêt d'utiliser des stringstream au lieu de string?

    Merci.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui, on peut taper dans les fonctions de la STL pour faire un peu plus "classe" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        std::ifstream file(fileName.c_str());
        (file) ? cout<<"success"<<endl : cout<<"error"<<endl;
        string line;
        vector<string> buffer;
        while(getline(file, line))
        {
            transform(line.begin(), line.end(), line.begin(), bind1st(plus<int>(), 1));
            buffer.push_back(line);
        }
        file.close();
     
        std::ofstream file2(fileName.c_str());
        copy(buffer.begin(), buffer.end(), ostream_iterator<string>(file2, "\n"));
    quel est l'intérêt d'utiliser des stringstream au lieu de stream?
    Comprends pas la question. Les stringstream sont des stream.

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Comprends pas la question. Les stringstream sont des stream.
    Oups, j'ai écrit trop vite, il faut lire "string"; c'est bon j'ai édité le message.

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Oui, on peut taper dans les fonctions de la STL pour faire un peu plus "classe"
    ...Je vais modestement conserver ma version, je n'ai pas le niveau.
    Mais j'étudierai ces fonctions plus tard.

    Sinon sont-elles plus efficaces au niveau de la vitesse d'exécution?

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    quel est l'intérêt d'utiliser des stringstream au lieu de string?
    Sur quel genre de code ?

    Sinon sont-elles plus efficaces au niveau de la vitesse d'exécution?
    Pas vraiment, non. De toute façon lorsque tu travailles avec des flux, le facteur limitant n'est pas la fonction que tu appelles, qui finalement ne sera qu'un enrobage qui aboutira quoiqu'il arrive au même genre de code, mais l'extraction / insertion dans les flux. Et puis lorsque tu travailles sur des flux tu as rarement besoin d'avoir une vitesse d'exécution phénomènale.

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Sur quel genre de code ?
    C'est ce code:
    http://c.developpez.com/faq/cpp/?pag...RS_full_buffer

  11. #11
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Alors? Y a t'il une différence entre string et stringstream?

    Merci.

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Hé bien les stringstream permettent (principalement) la conversion string<->autres types, mais elle permet aussi une manipulation aisée des chaines elles-mêmes(pour le parsing notemment).

  13. #13
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Donc dans ce code c'est ce qu'il y a de mieux à faire:
    http://c.developpez.com/faq/cpp/?pag...RS_full_buffer
    Des string simples n'auraient pas convenu?

  14. #14
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    J'ai un peu étudié les stringstream et elles semblent beaucoup plus puissantes que les string.

    Je précise donc ma question:
    Ne vaut il pas mieux utiliser les stringstream à la place des string (dans tous les cas)?
    (Sauf bien sûr quand il faut appeler des objets qui n'accepteraient que des string).

    Merci.

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce n'est vraiment pas la même utilisation, il y a des cas où tu voudras des string, d'autres où tu voudras des stringstreams.

    Tu auras besoin d'un stringstream pour passer d'une chaîne à autre chose ou inversement, mais si tu veux effectuer des manipulations typiques des chaîne alors un stringstream sera bien pénible à utiliser.

  16. #16
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    OK!
    Merci beaucoup.
    Je met le tag .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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