Voila enfaite j'essay de traiter les lignes d'un fichier mais enfaite de les traiter une par une mais je ne sais pas comment my prendre.
Pouvez-vous m'aider ?!
//Pour printf
#include "stdio.h"
//Fonction main
int main(int argc, char **argv)
{
//Si plus d'un paramètre
if (argc > 1)
{
//Ouvre le fichier passé en paramètre 1
FILE *fd = fopen(argv[1], "r");
//Caractère lu
char c;
//Lis chaque caractère du fichier
while ((c = getc(fd)) != EOF)
{
//Affiche le caractère
printf("%c", c);
}
//Clos le descripteur de fichier
fclose(fd);
}
//Renvoie zero comme code de retour
return 0;
}
Bah si, il y en a !
#include "stdio.h"
Normalement, c'est avec les < et >, mais il est vrai que ça marche aussi avec (à condition que tu n'aies pas placé un autre fichier stdio.h dans ton chemin d'inclusion).
//Ouvre le fichier passé en paramètre 1
FILE *fd = fopen(argv[1], "r");
//Caractère lu
char c;
//Lis chaque caractère du fichier
while ((c = getc(fd)) != EOF)
Deux erreurs: tu ne vérifies pas le résultat de fopen (peut-être que le fichier n'a pas été ouvert ?), et tu utilises une variable de type char pour stocker le résultat de getc. http://c-faq.com/stdio/getcharc.html
En plus, j'oubliais le principal, tu ne répondais pas vraiment à sa question: Kriss demandait comment traiter ligne par ligne, et tu donnes un exemple caractère par caractère ! fgets est la fonction ISO qui permet de faire ça, mais son usage n'est pas trivial: cf. https://linuxfr.org/comments/713347.html#713347 pour un de mes posts précédents à ce sujet.
fichier à traiter :
Toto Dupont 360
Jean Dujardin 750
Machin Truc 260
Titi Dupont 123
Pour afficher la somme de toutes les 3eme colonnes en awk :
awk 'BEGIN { lasomme=0 }
{ lasomme = lasomme + $3 }
END { print lasomme}' fichierAtraiter
Pour afficher la somme de toutes les 3eme colonnes de la famille Dupont :
awk 'BEGIN { lasomme=0 }
( $2 == Dupont) { lasomme = lasomme + $3 }
END { print lasomme}' fichierAtraiter
Alors d'après ce que j'ai compris, tu voudrais lire un fichier ligne par ligne et appliquer des traitements pour chacune d'entre-elles.
Il existe beaucoup d'outil et de langage permettant de faire ça, je peux déjà te donner quelques exemples sous Linux/Unix.
Lire un fichier ligne à ligne en SHELL :
cat TON_FICHIER | wile read LIGNE
do
[....] Tu insères tes commandes pour appliquer un traitement à la ligne courant, sachant que la ligne courante est stockée dans la variable $LIGNE [...]
done > NOUVEAU_FICHIER
Le fichier NOUVEAU_FICHIER contiendra donc les résultats des traitements que tu auras appliqué à condition d'avoir retourné le résultat sur la sortie standard.
Lire un fichier ligne à ligne en PERL :
open (FIC, "< FICHIER") or die("Impossible de lire le fichier");
while ()
{
[...] Insérer des traitements [...]
}
close(FIC)
Ici même chose, on lit le fichier ligne à ligne, on applique des traitements et on retourne le résultat sur la sortie standard ou alors on retourne le résultat dans un autre fichier que l'on lit en écriture....
Bref, on fait pas de fumée sans feu, si tu ne comprends pas ce qu'on t'explique, je t'invite à soit être plus précis dans ta demande, soit de commencer par prendre des cours d'algo, d'info, je suis pas cher :-)
# man
Posté par Anonyme . Évalué à 3.
Le caractère de fin de ligne est '\n'.
Voilà déjà un début.
[^] # Re: man
Posté par Kriss . Évalué à -2.
[^] # Re: man
Posté par Raphaël G. (site web personnel) . Évalué à 2.
[^] # Re: man
Posté par alf . Évalué à 1.
#include "stdio.h"
Normalement, c'est avec les < et >, mais il est vrai que ça marche aussi avec (à condition que tu n'aies pas placé un autre fichier stdio.h dans ton chemin d'inclusion).//Ouvre le fichier passé en paramètre 1 FILE *fd = fopen(argv[1], "r"); //Caractère lu char c; //Lis chaque caractère du fichier while ((c = getc(fd)) != EOF)
Deux erreurs: tu ne vérifies pas le résultat de fopen (peut-être que le fichier n'a pas été ouvert ?), et tu utilises une variable de type char pour stocker le résultat de getc. http://c-faq.com/stdio/getcharc.html[^] # Re: man
Posté par alf . Évalué à 1.
fgets est la fonction ISO qui permet de faire ça, mais son usage n'est pas trivial: cf. https://linuxfr.org/comments/713347.html#713347 pour un de mes posts précédents à ce sujet.
# Awk
Posté par yvounet14 . Évalué à 2.
Super et superpuissant. Ca fait des années que je l'utilise pour ça.
[^] # Re:
Posté par Kriss . Évalué à -1.
[^] # Re: Awk
Posté par Kriss . Évalué à -1.
[^] # Re: Awk
Posté par Anonyme . Évalué à 3.
tu peut aussi cliquer sur :
http://w3.uqo.ca/DOC/unx_awk.html
[^] # Re: Awk
Posté par Kriss . Évalué à 0.
[^] # Re: Awk
Posté par yvounet14 . Évalué à 1.
Voici un petit exemple :
fichier à traiter :
Toto Dupont 360
Jean Dujardin 750
Machin Truc 260
Titi Dupont 123
Pour afficher la somme de toutes les 3eme colonnes en awk :
awk 'BEGIN { lasomme=0 }
{ lasomme = lasomme + $3 }
END { print lasomme}' fichierAtraiter
Pour afficher la somme de toutes les 3eme colonnes de la famille Dupont :
awk 'BEGIN { lasomme=0 }
( $2 == Dupont) { lasomme = lasomme + $3 }
END { print lasomme}' fichierAtraiter
Voilà !
# ?
Posté par Kriss . Évalué à 0.
# ?
Posté par Kriss . Évalué à 0.
[^] # Re: ?
Posté par kadreg . Évalué à 4.
ayé, il recommencera plus :o
Ca ira comme exemple ? Ah ? Ce qu'il a fait ? Je sais pas, on trouvera bien ....
# .
Posté par snt . Évalué à 3.
voilà des pages contenant des exemples ( je te laisse chercher où se trouvent les exemples sur chaque page quand meme ... )
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/LangageC/TD200(...)
http://mapage.noos.fr/emdel/notes.htm#fichiers
# déchiffrage de demande...
Posté par Dabowl_92 . Évalué à 0.
Alors d'après ce que j'ai compris, tu voudrais lire un fichier ligne par ligne et appliquer des traitements pour chacune d'entre-elles.
Il existe beaucoup d'outil et de langage permettant de faire ça, je peux déjà te donner quelques exemples sous Linux/Unix.
Lire un fichier ligne à ligne en SHELL :
cat TON_FICHIER | wile read LIGNE
do
[....] Tu insères tes commandes pour appliquer un traitement à la ligne courant, sachant que la ligne courante est stockée dans la variable $LIGNE [...]
done > NOUVEAU_FICHIER
Le fichier NOUVEAU_FICHIER contiendra donc les résultats des traitements que tu auras appliqué à condition d'avoir retourné le résultat sur la sortie standard.
Lire un fichier ligne à ligne en PERL :
open (FIC, "< FICHIER") or die("Impossible de lire le fichier");
while ()
{
[...] Insérer des traitements [...]
}
close(FIC)
Ici même chose, on lit le fichier ligne à ligne, on applique des traitements et on retourne le résultat sur la sortie standard ou alors on retourne le résultat dans un autre fichier que l'on lit en écriture....
Bref, on fait pas de fumée sans feu, si tu ne comprends pas ce qu'on t'explique, je t'invite à soit être plus précis dans ta demande, soit de commencer par prendre des cours d'algo, d'info, je suis pas cher :-)
@ bientôt
[^] # Re: déchiffrage de demande...
Posté par Dabowl_92 . Évalué à 0.
il fallait lire non pas while() mais while (<FIC> )
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.