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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 39
    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 : 41
    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 : 39
    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 : 41
    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 : 39
    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 : 41
    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.

+ 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