Parser en C les lignes d'un fichier txt

Fermé
maria_silva Messages postés 13 Date d'inscription samedi 18 juin 2011 Statut Membre Dernière intervention 27 février 2012 - Modifié par maria_silva le 11/11/2011 à 22:56
maria_silva Messages postés 13 Date d'inscription samedi 18 juin 2011 Statut Membre Dernière intervention 27 février 2012 - 28 nov. 2011 à 00:22
Bonjour,
ça fait quelques jours,que je travaille dans un projet qui permettra l'interprétation de commandes DVI dés un fichier txt.

le fichier txt vient de la maniere suivante:

pre 02 018392c0 1c3b0000 000003e8 1b 20546558206f757470757420323031312e30392e32393a31373336
bop g0000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 fffffffg
down4 02a5bae2
push
down4 fd2f0000

Pour traiter chaque ligne separement, je souhaite diviser la ligne en argv[0],argv[1]...argv[i]

Mon gros souci: le programme compile sans warnings ou erreurs, mais il ne lit pas toutes les lignes...dans l'affichage, je trouve des lignes vides ou sans argv's, il ne compte pas toutes les lignes.

Le fichier txt d'entrée, ne contient pas des lignes vides, j'ai fait le test avec un fichier fragment de 195 lignes, et mon programme compte 98!?

Est-ce que quelqu'un peut reviser mon code, pour m'expliquer les erreurs?

Merci de votre aide


************************************************
voici l'affichage:
ligne[87]:
argument[0] = '
'

ligne[88]:
argument[0] = '
'

ligne[89]:
argument[0] = '
'

ligne[90]:
argument[0] = '0a8000'

ligne[91]:
argument[0] = 'push'

ligne[92]:
argument[0] = 'right3'
argument[1] = 'edbae2'

ligne[93]:
argument[0] = 'set_char_119
'

ligne[94]:
argument[0] = 'bf80'

ligne[95]:
argument[0] = 'set_char_104
'

ligne[96]:
argument[0] = '0345ac'

ligne[97]:
argument[0] = 'set_char_99
'

ligne[98]:
argument[0] = '
'
le fichier comporte 98 lignes

**************************************************
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 3000
#define MAX_ARG 10


int main(int argc, char * argv[])/*ouverture du fichier source et lecture de chaqu'un de ses lignes*/
{
  FILE *fichier;
  char **argument=NULL;
  char *ligne=malloc(sizeof(char)*SIZE);
  char *p=NULL;
  size_t i=0;
  char c;
  int nb_lignes=0;
  int nb_arg=0;


  fichier=fopen("frag.txt","r");

  if(fichier ==NULL){
    printf("unexpected EOF \n");
    exit(1);
  }
  printf("Ouverture du fichier\n");
  if (ligne==NULL){
      exit(0);
    }
    while(fgets(ligne, SIZE,fichier) !=NULL){
      if(NULL !=(p=strrchr(ligne,' ')))/*retourne l'adresse de la premiere ocurrence du caractere ' 'dans la ligne en partant de la fin de la chaine,p prends la valeur ' '*/ 
      *p='\0'; /* p passe de ' ' à \n*/
    else
      while(' ' !=(c=fgetc(fichier)) && c !=EOF);
      argument=(char**)malloc(sizeof(char*)*MAX_ARG);
	   p=strtok(ligne," ");
	i=0;
    while(p != NULL)
      {
	if(i<MAX_ARG){
	  argument[i]=(char*)malloc(sizeof(char)*(1+strlen(p)));
	  strcpy(argument[i],p);
	  i++;
	}
	else
	  break;
	p = strtok(NULL, " ");   
      } 
    nb_arg=i;

 printf("\nligne[%d]: \n",nb_lignes+1);

    for(i = 0; i<nb_arg; i++){ 
      printf("argument[%d] = '%s' \n", i, argument[i]);
    			}    
		nb_lignes++;
  }


  printf("le fichier comporte %d lignes\n",nb_lignes);
printf("\n");

printf("\n");
  if(fclose(fichier)==EOF){
    printf("Probleme de fermeture du fichier:");
    exit(1);
  }


  printf("Fermeture du fichier avec success\n");
  free(argument[i]);
  free(argument);
  free(ligne);
  return 0;
				

}
A voir également:

1 réponse

maria_silva Messages postés 13 Date d'inscription samedi 18 juin 2011 Statut Membre Dernière intervention 27 février 2012
28 nov. 2011 à 00:22
Poster des messages sur ce forum, il parait que ça ne donne aucun résultat....
0