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

  FORUM HardWare.fr
  Programmation
  C

  Un peu d'aide sur un mélange de cat/tail

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un peu d'aide sur un mélange de cat/tail

n°679081
_Faust_
Burn-out général
Posté le 21-03-2004 à 00:30:04  profilanswer
 

Il n'y a pas quelqu'un qui voudrait m'aider? je suis entrain de virer complètement fou. J'ai 18 début de programme qui marche pas  :pfff:  
 
Ca fait 1 semaine que je cherche la solution et j'y arrive pas. Pourtant c'est pas que j'ai pas essayé!  :cry:  
 
Sur Linux,
Voilà, j'essai de faire comme un "cat" sous Unix mélangé avec un "tail". Autrement dit, ca affiche le nombres de lignes demandées passées en paramètres, dans tous les fichiers passé en paramètres. Si aucun paramètre n'est passé, il affiche que les 10 dernières lignes.  
 
La seule chose que j'ai réussi à faire, c'est d'afficher les lignes entres le début et la fin.  
 

Code :
  1. #include <stdio.h>
  2. #include <errno.h>
  3. int main(int argc,char *argv[])
  4. {
  5. FILE *f;
  6. int d,f,c=0;
  7. char l[100000];
  8. if (argc!=4)
  9. {
  10. printf("Usage: %s <debut> <fin> <fichier>\n",argv[0]);
  11. return 1;
  12. }
  13. if ((f=fopen(argv[3],"r" ))==NULL)
  14. {
  15. perror("fopen()" );
  16. return 1;}
  17. sscanf(argv[1],"%d",&d);
  18. sscanf(argv[2],"%d",&f);
  19. while (fgets(l,100000,f))
  20. {
  21. c++;
  22. if ((d<=c)&&(c<=f)) fputs(l,stdout);
  23. if (c>f) break;
  24. }
  25. fclose(f);
  26. return 0;
  27. }


 

mood
Publicité
Posté le 21-03-2004 à 00:30:04  profilanswer
 

n°679082
Taz
bisounours-codeur
Posté le 21-03-2004 à 00:41:03  profilanswer
 

et quoi ?
 
man getline déjà

n°679083
_Faust_
Burn-out général
Posté le 21-03-2004 à 00:46:38  profilanswer
 

et deux aspirine
 
je connaissais pas cette "fonction"  
 
merci ca m'aide un peu

n°679104
matafan
Posté le 21-03-2004 à 06:32:39  profilanswer
 

Je comprend pourquoi pourquoi tu dit faire un mélange de cat et tail... Que fait ton programme que tail ne fait pas ? Parce que tel que tu le décrit, c'est tail...

n°679107
_Faust_
Burn-out général
Posté le 21-03-2004 à 07:49:55  profilanswer
 

Je crois que tail ne prend qu'un fichier en paramètre, tandis que cat en "concatene" plusieurs, donc ca serait la fonction tail qui affiche un nombre n de ligne dans plusieurs fichier

n°679460
matafan
Posté le 21-03-2004 à 21:04:07  profilanswer
 

Ben non justement, tail prend plusieurs fichiers. « tail -q -n <num> <file1> <file2> ... » fait exactement ce que tu veux.

n°679576
_Faust_
Burn-out général
Posté le 22-03-2004 à 00:43:04  profilanswer
 

Pour ceux que ca intéressent, j'ai réussi à faire quelque chose...c'est laid et mal coder mais ca donne exactement le résultat voulu
 
reste qu'a mettre une gestion d'erreur que j'arrive pas, mais bon ca c'est un détail.
 
genre ./tail -4 fichier1 fichier 2 -->ok
./tail fichier --> ok 10 lignes par défaut
./tail 4 fichier1 fichier2 --> Erreur, usage ./tail -n <fichier>
 

Code :
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. int main(int argc, char* argv[])
  4. {
  5. int k;
  6. int j = -10;
  7. int t = -10;
  8. char* nomsFichiers;
  9. FILE* streamin;
  10. for (k = 1; k < argc; k++)
  11. {
  12.  if (argv[k][0] == '-')
  13.  {
  14.   t = atoi(argv[k]+1);
  15.   if (t == 0)
  16.   {
  17.    printf("Parametres incorrects"\n" );
  18.   }
  19.   t = -t;
  20.   j = t;
  21.  }
  22.  else
  23.  {
  24.   printf("\nDernieres %d lignes \n", -t);
  25.   nomsFichiers = argv[k];
  26.   if ((streamin = fopen(nomsFichiers, "r" )) == NULL)
  27.   {
  28.    printf("Impossible d'ouvrir le fichier: %s. \n", nomsFichiers);
  29.    return 2;
  30.   }
  31.   printf("du fichier %s \n\n", nomsFichiers);
  32.   int compteLignes = 1;
  33.   int totalLignes = 0;
  34.   int debutLigne = 0;
  35.   int ch;
  36.   while ((ch = getc(streamin)) !=EOF)
  37.   {
  38.    if ((ch == '\n')
  39.    {
  40.     totalLignes++;
  41.    }
  42.   }
  43.   if (j > 0)
  44.   {
  45.    debutLigne = 1+j;
  46.   }
  47.   else
  48.   {
  49.    debutLigne = totalLignes +j+2;
  50.   }
  51.   if ((streamin = fopen(nomsFichiers, "r" )) == NULL)
  52.   {
  53.    printf("Impossible d'ouvrir le fichier: %s.\n", nomsFichiers);
  54.    return 2;
  55.   }
  56.   while ((ch = getc(streamin)) !=EOF)
  57.   {
  58.    if (compteLignes >= debutLigne-1)
  59.    {
  60.     printf("%c", ch);
  61.    }
  62.    if (ch == '\n')
  63.    {
  64.     compteLignes++;
  65.    }
  66.   }
  67.  }
  68. }
  69. fclose (streamin);
  70. return 0;
  71. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Un peu d'aide sur un mélange de cat/tail

 

Sujets relatifs
Java Media Framework - Petite aideValidation d'un formulaire , a l'aide !
Aide pour faire application de video conferenceAide contextuelle sur lien(s) hypertexte
Petit logiciel de compression, besoin d'aide pour structurer méthodeVRAIMENT VRAIMENT besoin d'aide
[C#/XML]Lecture de fichier XML à l'aide d'un XML schema ?aide pour la boucle for en commande dos
Cherche aide sur GD librairie en perlAide JBuilder
Plus de sujets relatifs à : Un peu d'aide sur un mélange de cat/tail


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR