Comment connaitre le nombre de char dans une fichier texte.txt - C - Programmation
Marsh Posté le 26-05-2006 à 11:07:18
une solution portable, mais uniquement pour des fichiers (pas des fluxs): utiliser fseek et ftell.
Code :
|
Marsh Posté le 26-05-2006 à 11:29:19
merci à vous je vais prendre la première solution car je n'ai pas besoin de portabilité..
merci bcp à vous !
Marsh Posté le 26-05-2006 à 11:30:39
magiclazy a écrit : voilà tout est dans la question
|
Une taille de ligne . Tu donnes une taille raisonnable (128, 256...). Si la ligne n'est pas lue complètement, le \n ne sera pas présent. Mais la lecture suivante lira la suite. 0 priori, pas de perte de données.
Citation : |
Rien de standard. Avec realloc() et fgetc() tu peux en faire une. C'est fun !
Marsh Posté le 26-05-2006 à 11:31:55
magiclazy a écrit : merci à vous je vais prendre la première solution car je n'ai pas besoin de portabilité.. |
Elle est portable, mais je suis pas sûr qu'elle fasse ce que tu veux...
Marsh Posté le 26-05-2006 à 11:36:06
effectivment j'ai pas bien refléchi ..
sa ne va pas avec getchar
mais en te relisant (emmanuel) effectivement c'est lecture de ligne et ce qu'il me faudrait c'est lecture de tout le fichier ..
Marsh Posté le 26-05-2006 à 11:46:18
magiclazy a écrit : voilà tout est dans la question
|
Si tu veux juste connaître la taille d'un fichier, tu peux utiliser "stat()"
Si tu veux le traiter (copier, afficher), tu fais une boucle de lecture+traitement
Emmanuel Delahaye a écrit : Une taille de ligne . Tu donnes une taille raisonnable (128, 256...). Si la ligne n'est pas lue complètement, le \n ne sera pas présent. Mais la lecture suivante lira la suite. 0 priori, pas de perte de données. |
Si c'est pour lire bloc par bloc sans avoir besoin de traiter la ligne, je privilégierais "fread()" plutôt que "fgets()"
Au pire, il y aura autant d'itérations avec l'une que l'autre...
Marsh Posté le 26-05-2006 à 11:48:38
je vois sois et je vous dis demain merci
ps:je bloque pour pour sortir le resultat d'un system(); vers un 'file' que j'ai crée plutot avec FILE*file=fopen();
merkiii
Marsh Posté le 26-05-2006 à 11:52:07
magiclazy a écrit : je vois sois et je vous dis demain merci |
system() lance un autre programme sans aucune intéraction possible avec le programme initial.
Solution batarde mais immédiatement disponible :
Tu peux faire
Citation : system("programme2 >fichier" ) |
Puis
Citation : fopen("fichier", "r" (ou "rb", ça dépend)) |
Ou alors utiliser des mécanismes plus fin de communication entre programmes comme pipes, socket, files de messages, etc...
Marsh Posté le 26-05-2006 à 11:52:17
hap j'ai rien dis avec ce model sa devrait aller !!
Code :
|
[EDIT]grilled !! j'essaye ta méthode !
Marsh Posté le 26-05-2006 à 11:54:23
magiclazy a écrit : grilled !! j'essaye ta méthode ! |
Non, le popen est meilleur que le system !!!
Marsh Posté le 26-05-2006 à 11:54:30
je peux pas applique ta méthode car plus au dans le programme je génere le nom du *.txt ...
Marsh Posté le 26-05-2006 à 11:56:48
magiclazy a écrit : je peux pas applique ta méthode car plus au dans le programme je génere le nom du *.txt ... |
Mais si tu peux. Puisque le pgm2 génère lui-même le fichier écrit, tu peux faire juste "fopen("fic.txt", "r" )". Mais comme je l'ai dit, le popen est fait pour ça donc c'est préférable au system()
Marsh Posté le 26-05-2006 à 11:59:49
Code :
|
je l'ai vite fait adapter sa à l'air de marcher
Marsh Posté le 26-05-2006 à 12:23:54
magiclazy a écrit :
|
Ben très vite fait alors.
1) même si le C permet maintenant de faire ce qu'on veut, on déclare quand-même les variables avant les instructions
2) tu fermes "file" sans l'avoir ouvert
Marsh Posté le 26-05-2006 à 12:27:58
Code :
|
voilà, enfin pour les commentaires mais si vous denoté une erreur flagrante de vocabulaire qui montre une imcoprehension de ma part n'hesitez pas !
Marsh Posté le 26-05-2006 à 12:53:21
dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ?
Il doit bien y avoir un truc stat qui donne la taille non ?
Marsh Posté le 26-05-2006 à 13:13:50
kruso a écrit : dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ? |
Vu que sizeof (char) vaut 1 par définition, ça va pas nous avancer beaucoup...
Marsh Posté le 26-05-2006 à 14:15:53
Emmanuel Delahaye a écrit :
|
On passe parfois de bon moment sur les forum de dev
Marsh Posté le 26-05-2006 à 14:16:16
Emmanuel Delahaye a écrit : Vu que sizeof (char) vaut 1 par définition, ça va pas nous avancer beaucoup... |
kruso a écrit : dites, c'est peut-etre une grosse connerie, mais est ce qu'il n'y a pas moyen de diviser la taille du fichier en octect par sizeof(char) ? |
...and the winner is...
Marsh Posté le 26-05-2006 à 15:53:55
bon tout le monde a beau l'air de se foutre de moi, je ne pige quand même pas pourquoi ça ne marche pas ...
la fonction int stat(const char *file_name, struct stat *buf); permet bien d'avoir la taille en octect non ?
Pour le sizeof(char) c'était juste par soucis de clarté, c'est vrai que c'est inutile xD
Marsh Posté le 26-05-2006 à 16:36:30
kruso a écrit : la fonction int stat(const char *file_name, struct stat *buf); permet bien d'avoir la taille en octect non ? |
Oui. Elle te donne les informations sur un fichier (type, propriétaire, droits, etc...) et, entre autres, sa taille. mais faut savoir s'en servir...
Code :
|
Marsh Posté le 26-05-2006 à 17:40:05
Sve@r a écrit : Oui. Elle te donne les informations sur un fichier (type, propriétaire, droits, etc...) et, entre autres, sa taille. mais faut savoir s'en servir...
|
Ben comment s'en servir ça se trouve dans n'importe quel man
Et ça n'a que des avantages : on fait un seul appel systeme, on ne parcours pas tout le fichier ...
bref je pige pas pourquoi tout le monde se fout de moi
Marsh Posté le 26-05-2006 à 18:01:55
kruso a écrit : Ben comment s'en servir ça se trouve dans n'importe quel man |
Par de problèmes avec stat() (à part que c'est pas standard C, mais POSIX.1, portabilité non garantie...).
C'est ta tirade sur le nombres d'octets qui nous a fait bien rire...
Marsh Posté le 26-05-2006 à 10:40:29
voilà tout est dans la question
car si je veux imprimer sur stdin gràce à fgets il me faut une taille
ou sinon quel autre fonction utiliser sans avoir besoin de spécifier la taille ?
merci d'avance