Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3128 connectés 

 


Dernière réponse
Sujet : [c++] parcourir un fichier...
LeGreg

joce a écrit a écrit :

 
t'es sur de ca :heink:
Le C++ alloue pas la mémoire dynamiquement dans ce cas non :??:  




 
Argh !
ben non char *, on ne te l'alloue
pas dans ton dos, surtout que ton char * la
il est passe en valeur et pas par reference
(donc getline il aurait du mal a modifier sa valeur pour
y placer un pointeur alloue).
 
La solution c'est soit de definir un char toto[81];
pour pouvoir y caser 80 caracteres (plus le nul terminal)
soit d'utiliser les std::string
(mais c'est plus lourd que le char *).
 
Par ailleurs le comportement de ton appli
n'est pas bien defini :
le getline ne stocke pas le caractere terminal
dans ta chaine, ce qui fait que la sortie
risque d'etre desordonnee (les passages a la ligne
seront bouffes).
 
Si tu veux reprogrammer cat
il vaut peut-etre mieux travailler en mode
binaire et utiliser les fonctions
istream::read et ostream::write..
 
Sinon allouer un tampon de la taille de ton fichier
c'est plutot une mauvaise idee => si ton fichier
fait 1 Go je n'ose pas imaginer..  
pour optimiser les appels systemes, il vaut mieux
travailler avec des tampons de taille
assez importante, la taille optimale
depend evidemment des circonstances,
mais des tampons trop gros provoquent
des rallentissements lies a la gestion
de la memoire et des tampons trop petits
sont inefficaces parce que tu multiplies des appels
systeme pour pas grand chose.
 
A+
LEGREG

 

[edtdd]--Message édité par legreg--[/edtdd]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
LeGreg

joce a écrit a écrit :

 
t'es sur de ca :heink:
Le C++ alloue pas la mémoire dynamiquement dans ce cas non :??:  




 
Argh !
ben non char *, on ne te l'alloue
pas dans ton dos, surtout que ton char * la
il est passe en valeur et pas par reference
(donc getline il aurait du mal a modifier sa valeur pour
y placer un pointeur alloue).
 
La solution c'est soit de definir un char toto[81];
pour pouvoir y caser 80 caracteres (plus le nul terminal)
soit d'utiliser les std::string
(mais c'est plus lourd que le char *).
 
Par ailleurs le comportement de ton appli
n'est pas bien defini :
le getline ne stocke pas le caractere terminal
dans ta chaine, ce qui fait que la sortie
risque d'etre desordonnee (les passages a la ligne
seront bouffes).
 
Si tu veux reprogrammer cat
il vaut peut-etre mieux travailler en mode
binaire et utiliser les fonctions
istream::read et ostream::write..
 
Sinon allouer un tampon de la taille de ton fichier
c'est plutot une mauvaise idee => si ton fichier
fait 1 Go je n'ose pas imaginer..  
pour optimiser les appels systemes, il vaut mieux
travailler avec des tampons de taille
assez importante, la taille optimale
depend evidemment des circonstances,
mais des tampons trop gros provoquent
des rallentissements lies a la gestion
de la memoire et des tampons trop petits
sont inefficaces parce que tu multiplies des appels
systeme pour pas grand chose.
 
A+
LEGREG

 

[edtdd]--Message édité par legreg--[/edtdd]

joce

CARBON_14 a écrit a écrit :

Avant que les spécialistes trouvent une solution, le char *str;  
c'est bien, mais un pointeur ne suffit pas à stocker une chaîne. Faut peut-être réserver de la mémoire, ou faire un char str[81];  
 
Pour le reste, désolé, je ne suis qu'au début de mon livre sur le C++...  




t'es sur de ca :heink:
Le C++ alloue pas la mémoire dynamiquement dans ce cas non :??:

Clarkent Utilise la fonction stat ou fstat pour pouvoir récupérer la taille du fichier, puis alloue ton pointeur qui te sert de buffer avec la fonction malloc. Tu pourras ainsi copier la totalité de ton fichier dans le tampon.
freewol tiens chelou c'est revenu à la normale ... y se passe vraiment des trucs bizzares ici ...
Krueger Aïe! :eek:
freewol c 'est incroyable la mise en page de la page "répondre" !!!! Jamais vu ça ... Joce !!! Y a un bug !! Faut le voir pour le croire ...
edit : ça le fait même pour édit ou tout ce qui fait taper un texte ...

 

[edtdd]--Message édité par freewol--[/edtdd]

Carbon_14 Avant que les spécialistes trouvent une solution, le char *str;  
c'est bien, mais un pointeur ne suffit pas à stocker une chaîne. Faut peut-être réserver de la mémoire, ou faire un char str[81];  
 
Pour le reste, désolé, je ne suis qu'au début de mon livre sur le C++...
art_dupond bonjour les gens,  
 
 
pour parcourir un fichier, j'ai fait :
 

Code :
  1. char *str;
  2. ifstream infile("nom_fichier", ios::in);
  3. while(!infile.eof())
  4. {
  5.    infile.getline(str, 80, '\n');
  6.    cout << str;
  7. }

 
 
Ca marche pô :(  
 
(sans le while, ca marche)
 
 
En fait, j'ai un fichier avec des données (de différents types) séparés par des ";" (j'ai vu un topic dessus, mais j'ai pas tout compris :sweat: ).
Est-ce que la méthode getline est appropriée pour récupérer ces données, ou peut-on faire "mieux" autrement ?
 
 
 
Voili, si vous pouviez m'éclairer sur tout ca... :jap:

 

[edtdd]--Message édité par art_dupond--[/edtdd]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)