Traduction dans Visual C++
Résolu/Fermé
Nico@22
Messages postés
4
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 mai 2008
-
30 avril 2008 à 18:56
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 1 mai 2008 à 17:33
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 1 mai 2008 à 17:33
A voir également:
- Traduction dans Visual C++
- Traduction photo gratuit - Guide
- Microsoft visual c++ runtime - Guide
- Visual petanque - Télécharger - Sport
- Visual paradigm - Télécharger - Gestion de données
- Visual basic download - Télécharger - Langages
6 réponses
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
30 avril 2008 à 19:52
30 avril 2008 à 19:52
Bonjour,
C'est un C++ tout ce qu'il y a de plus standard donc ce n'est pas un problème d'éditeur.
Par contre... nommer ses variables line, Line, ligne et Line_to_Modify donne une clarté reprochable.
if (ReadFile) //Si le fichier est trouvé
->
if ( ReadFile.is_open() )
L'idée parait être la bonne, qu'est-ce qui ne fonctionne pas exactement ?
M.
ps: Il y a des balises pour garder l'indentation du code ;)
C'est un C++ tout ce qu'il y a de plus standard donc ce n'est pas un problème d'éditeur.
Par contre... nommer ses variables line, Line, ligne et Line_to_Modify donne une clarté reprochable.
if (ReadFile) //Si le fichier est trouvé
->
if ( ReadFile.is_open() )
L'idée parait être la bonne, qu'est-ce qui ne fonctionne pas exactement ?
M.
ps: Il y a des balises pour garder l'indentation du code ;)
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
1 mai 2008 à 15:12
1 mai 2008 à 15:12
Si, on peut parfaitement.
ifstream (input file stream) et ofstream (output file stream) sont les équivalents C++ du FILE * en C.
M.
ifstream (input file stream) et ofstream (output file stream) sont les équivalents C++ du FILE * en C.
M.
Nico@22
Messages postés
4
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 mai 2008
1 mai 2008 à 15:33
1 mai 2008 à 15:33
En faite, sa nous donne: fopen et fclose ?
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
1 mai 2008 à 16:23
1 mai 2008 à 16:23
Oui, en quelques sorte.
en C:
en C++:
Rien n'empêche de le faire en C si c'est ta préférence.
En somme, ifstream représente un FILE * spécialisé pour la lecture et ofstream un FILE * spécialisé pour l'écriture.
La méthode que j'appliquerais est la suivante :
1) Lecture totale du fichier.
2) Modification de la ligne lue dans le tampon mémoire.
3) Ré-écriture complète.
Si le fichier est très gros ça peut être dommage de le lire en entier pour une ligne à changer.
Par contre si on veut remplacer par une ligne plus longue on est plus ou moins obligé.
Pour une lecture complète et rapide (tout le fichier en une seule lecture) tu peux t'inspirer de ceci ("Snippet" sur cppFrance.fr)
Le fichier est ouvert, le curseur de lecture est déplacé à la fin, la position du curseur est récupérée dans une variable pour mémoriser le nombre d'octets du fichier puis le curseur est replacé au début pour la lecture qui va suivre. C'est un bon moyen pour connaître la taille du fichier pour pouvoir allouer un tampon approprié pour la lecture.
oups, j'allais oublier. Pour l'exploitation du tampon, strtok (sur MSDN.microsoft.com) est une fonction magique. ^^ C'est une fonction standard de string.h. Idéale ici pour retrouver facilement les lignes une à une.
Ainsi je ferais:
1) Lecture complète. (et fermeture)
2) parcours des lignes lues en recopiant les premières lignes dans le fichier.
3) création de la nouvelle ligne et écriture.
4) parcours du reste en recopiant jusqu'à la fin.
Ce qui au final fait quand même un traitement assez lourd. Il vaut mieux éviter de le faire en boucle si on veut modifier plusieurs lignes et adopter une structures plus performante surtout...
M.
en C:
#include <stdlib.h> #include <stdio.h> FILE *pMyFile = NULL; pMyFile = fopen( "monFichier.txt", "r" ); // r = read if ( pMyFile != NULL ) // ouverture ok. { while( fgets( ... ) != NULL ) { ... } fclose( pMyFile ); }
en C++:
#include <string> #include <fstream> std::ifstream myFile; myFile.open( "monFichier.txt" ); if ( myFile.is_open() ) { while( myFile.getLine( ... ) ) { ... } myFile.close(); }
Rien n'empêche de le faire en C si c'est ta préférence.
En somme, ifstream représente un FILE * spécialisé pour la lecture et ofstream un FILE * spécialisé pour l'écriture.
La méthode que j'appliquerais est la suivante :
1) Lecture totale du fichier.
2) Modification de la ligne lue dans le tampon mémoire.
3) Ré-écriture complète.
Si le fichier est très gros ça peut être dommage de le lire en entier pour une ligne à changer.
Par contre si on veut remplacer par une ligne plus longue on est plus ou moins obligé.
Pour une lecture complète et rapide (tout le fichier en une seule lecture) tu peux t'inspirer de ceci ("Snippet" sur cppFrance.fr)
Le fichier est ouvert, le curseur de lecture est déplacé à la fin, la position du curseur est récupérée dans une variable pour mémoriser le nombre d'octets du fichier puis le curseur est replacé au début pour la lecture qui va suivre. C'est un bon moyen pour connaître la taille du fichier pour pouvoir allouer un tampon approprié pour la lecture.
oups, j'allais oublier. Pour l'exploitation du tampon, strtok (sur MSDN.microsoft.com) est une fonction magique. ^^ C'est une fonction standard de string.h. Idéale ici pour retrouver facilement les lignes une à une.
Ainsi je ferais:
1) Lecture complète. (et fermeture)
2) parcours des lignes lues en recopiant les premières lignes dans le fichier.
3) création de la nouvelle ligne et écriture.
4) parcours du reste en recopiant jusqu'à la fin.
Ce qui au final fait quand même un traitement assez lourd. Il vaut mieux éviter de le faire en boucle si on veut modifier plusieurs lignes et adopter une structures plus performante surtout...
M.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nico@22
Messages postés
4
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 mai 2008
1 mai 2008 à 17:00
1 mai 2008 à 17:00
De ce que tu viens de dire, j'ai pu remplacer certains éléments.
Pour celle-ci : while ( std::getline( ReadFile, line ) ) //on parcours le fichier et on initialise line à la ligne actuelle
je l'ai remplacé par: while (fgets(line, 1000, ReadFile))
J'ai mis 1000 au hasard, et la compilation s'arrête par une "fatal error" à cette ligne.
Pour celle-ci : while ( std::getline( ReadFile, line ) ) //on parcours le fichier et on initialise line à la ligne actuelle
je l'ai remplacé par: while (fgets(line, 1000, ReadFile))
J'ai mis 1000 au hasard, et la compilation s'arrête par une "fatal error" à cette ligne.
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
1 mai 2008 à 17:33
1 mai 2008 à 17:33
fgets ;-)
M.
M.
1 mai 2008 à 14:48