
stage prog
7 messages
• Page 1 sur 1
stage prog
Bonjour Monsieur Lelore,
Ouf j'ai quand meme reussi à avoir une ptite tache en prog , j'ai galéré pour l'avoir , mais ne rejouissons pas trop vite.
En fait on m'a demandé de programmer en c++ une fonction qui permettrait de supprimer les caracteres LF (Line Feed = Saut de ligne) et remplacer par un espace dans un fichier.
L'inconvenient c'est que je ne peux pas verifier si le caractere a bien été supprimé. Il faut que je fasse verifier par le developpeur car c'est un fichier special mais actuellement il n'est pas là.
Dites moi ce que vous pensez de ca mais je suis pas sûr du tout .
Merci d'avance
Ouf j'ai quand meme reussi à avoir une ptite tache en prog , j'ai galéré pour l'avoir , mais ne rejouissons pas trop vite.
En fait on m'a demandé de programmer en c++ une fonction qui permettrait de supprimer les caracteres LF (Line Feed = Saut de ligne) et remplacer par un espace dans un fichier.
L'inconvenient c'est que je ne peux pas verifier si le caractere a bien été supprimé. Il faut que je fasse verifier par le developpeur car c'est un fichier special mais actuellement il n'est pas là.
Dites moi ce que vous pensez de ca mais je suis pas sûr du tout .
- Code: Tout sélectionner
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream fichier("test.txt",ios_base::in);
string ligne;
getline(fichier,ligne);
while(!fichier.eof()){
if(ligne=="/n")
{
cout<<" "<<endl;
}else{
cout<<ligne<<endl;
}
getline(fichier,ligne);
}
fichier.close();
return 0;
}
Merci d'avance
- kevinklein
Re: stage prog
C'est presque bon (l'idée est bonne), mais y'a beaucoup plus simple !
En effet, getline récupère une ligne du fichier texte... Mais qu'est ce que ça veut dire en réalité ? Ca veut dire que la fonction va récupérer tous les caractères jusqu'au caractère LF. Donc tu a résolut ton problème puisque tu auras dans ligne tous les caractères sauf le caractère LF ! Donc tu n'as pas besoin de tester que ta ligne est égale au caractère LF, puisque getline l'aura enlevé
!
Par contre, au lieu d'afficher les lignes à l'écran avec un cout, tu devrais les enregistrer dans un autre fichier ! Et tu pourras tester du coup que le caractère a bien été supprimé : si dans le fichier de destination tu n'as plus qu'une ligne, c'est bien que le caractère saut de ligne a été enlevé...
A toi de tester avec 2-3 fichiers textes (l'un avec une ligne, l'autre avec plein de lignes et un dernier avec plusieurs saut de lignes à la suite...)
Bon courage et reposte ton code !
En effet, getline récupère une ligne du fichier texte... Mais qu'est ce que ça veut dire en réalité ? Ca veut dire que la fonction va récupérer tous les caractères jusqu'au caractère LF. Donc tu a résolut ton problème puisque tu auras dans ligne tous les caractères sauf le caractère LF ! Donc tu n'as pas besoin de tester que ta ligne est égale au caractère LF, puisque getline l'aura enlevé

Par contre, au lieu d'afficher les lignes à l'écran avec un cout, tu devrais les enregistrer dans un autre fichier ! Et tu pourras tester du coup que le caractère a bien été supprimé : si dans le fichier de destination tu n'as plus qu'une ligne, c'est bien que le caractère saut de ligne a été enlevé...
A toi de tester avec 2-3 fichiers textes (l'un avec une ligne, l'autre avec plein de lignes et un dernier avec plusieurs saut de lignes à la suite...)
Bon courage et reposte ton code !
- Tibo
- Administrateur du site
- Messages: 147
- Inscription: 26 Mar 2008, 13:58
Re: stage prog
Merci Monsieur je pense avoir trouvé
J'ai fais comme vous m'avez dit
Toute fois j'ai remarqué plusieurs choses :
- la premiere ligne n'a pas été copié
- je pense que le reste a été copié puisque tout est à la suite
- le fichier 2 est plus léger (0,17Ko de difference) (mais je me suis dis que si j'utilise getline() forcement les sauts de ligne virent et du coup il y a moins d'octets).
Dites moi ce que vous en pensez
Merci.
J'ai fais comme vous m'avez dit
Toute fois j'ai remarqué plusieurs choses :
- la premiere ligne n'a pas été copié
- je pense que le reste a été copié puisque tout est à la suite
- le fichier 2 est plus léger (0,17Ko de difference) (mais je me suis dis que si j'utilise getline() forcement les sauts de ligne virent et du coup il y a moins d'octets).
Dites moi ce que vous en pensez
Merci.
- Code: Tout sélectionner
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream fichier("test.txt",ios_base::in);
string ligne;
getline(fichier,ligne);
ofstream fichier1("test2.txt",ios_base::out);
while(!fichier.eof()){
getline(fichier,ligne);
fichier1<<ligne;
}
fichier.close();
fichier1.close();
return 0;
}
- kevinklein
- Messages: 4
- Inscription: 29 Mai 2009, 17:40
Re: stage prog
INFO DERNIERE MINUTE
En fait j'avais mal compris , l'informaticien m'avait demandé d'enlever seulement
CR (caractère retour chariot) et non pas LF (les sauts de ligne).
J'étais étonné que ca soit simple
.
Si vous avez une idée n'hésitez pas merci d'avance.
En fait j'avais mal compris , l'informaticien m'avait demandé d'enlever seulement
CR (caractère retour chariot) et non pas LF (les sauts de ligne).
J'étais étonné que ca soit simple

Si vous avez une idée n'hésitez pas merci d'avance.
- kevinklein
- Messages: 4
- Inscription: 29 Mai 2009, 17:40
Re: stage prog
cela va surement servir pour linux, car Les caractères de fin de ligne sont les suivants :
Sous Unix / Linux : 0x0A = LF = \n
et sous DOS / windows : 0x0D,0x0A = CRLF = \r\n
pour faire la correspondance il faut donc enlever les '\r' (CR)
ceci n'est pas si compliquer tu fais une boucle qui test chaque caractère d'une ligne :
et donc au moment ou tu sort de la boucle, tu remplace ce fameux '\r' par '\n' par exemple..
PS : Attention au caractère, comme j'ai vue dans ton code précédant que tu à mis
(ligne=="/n") comme c'est un caractère il faut l'écrire comme ça : (ligne=='\n')
Sous Unix / Linux : 0x0A = LF = \n
et sous DOS / windows : 0x0D,0x0A = CRLF = \r\n
pour faire la correspondance il faut donc enlever les '\r' (CR)
ceci n'est pas si compliquer tu fais une boucle qui test chaque caractère d'une ligne :
- Code: Tout sélectionner
while ( ligne[cpt]!='\r')
{
cpt++;
}
ligne[cpt]='\n';
et donc au moment ou tu sort de la boucle, tu remplace ce fameux '\r' par '\n' par exemple..
PS : Attention au caractère, comme j'ai vue dans ton code précédant que tu à mis
(ligne=="/n") comme c'est un caractère il faut l'écrire comme ça : (ligne=='\n')
- N4th
- Messages: 14
- Inscription: 28 Mar 2008, 23:30
Re: stage prog
Comme le dit N4th, c'est sans doute un problème de compatibilité entre linux et windows...
Mais contrairement à ce que propose N4th, je ferai ça différemment :
La boucle qui est déjà faite est presque bonne (sauf pour la première ligne, mais tu devrais t'en sortir tout seul), c'est au moment d'écrire dans le nouveau fichier qu'il faut réfléchir à ce qu'il faut faire...
Si tu recopie la ligne bêtement, tu va aussi recopier \r\n :
En effet, le dernier caractère de ligne est \r (le \n a été enlevé par le getline). Comme ligne est de type string, tu va pouvoir utiliser ces deux fonctions :
ligne.length() : ça te renverra le nombre de caractères de la ligne
ligne.substr(0,taille-1) : renvoit la ligne sans le dernier caractère... Avant de faire ça il faut penser à vérifier que le dernier caractère est bien égal à \r :
J'espère qu'avec ça tu y arrivera !
Mais contrairement à ce que propose N4th, je ferai ça différemment :
La boucle qui est déjà faite est presque bonne (sauf pour la première ligne, mais tu devrais t'en sortir tout seul), c'est au moment d'écrire dans le nouveau fichier qu'il faut réfléchir à ce qu'il faut faire...
Si tu recopie la ligne bêtement, tu va aussi recopier \r\n :
- Code: Tout sélectionner
fichier1<<ligne;
En effet, le dernier caractère de ligne est \r (le \n a été enlevé par le getline). Comme ligne est de type string, tu va pouvoir utiliser ces deux fonctions :
ligne.length() : ça te renverra le nombre de caractères de la ligne
ligne.substr(0,taille-1) : renvoit la ligne sans le dernier caractère... Avant de faire ça il faut penser à vérifier que le dernier caractère est bien égal à \r :
- Code: Tout sélectionner
getline(fichier,ligne);
if(ligne[ligne.length()-1]=='\r'){
ligne=ligne.substr(0,ligne.length()-1);
}
fichier1<<ligne;
J'espère qu'avec ça tu y arrivera !
- Tibo
- Administrateur du site
- Messages: 147
- Inscription: 26 Mar 2008, 13:58
Re: stage prog
Ah oui effectivement c'est une bien meilleur solution
vous n'êtes pas prof pour rien! :p

- N4th
- Messages: 14
- Inscription: 28 Mar 2008, 23:30
7 messages
• Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités