Aller au contenu

[C] Lecture d'un fichier texte


Jericho

Messages recommandés

Bonjour,

dans le cadre d'un cours de langage C (les threads exactement) sous Unix, je dois faire une lecture dans un fichier texte contenant des caractères.

Je dois ensuite comparer une certaine chaine de caractère à ce fichier et s'il s'y trouve, compter le nombre de fois.

Si je fais appel à vous, c'est que bien entendu, mon code ne fonctionne pas :-p

Voici ma fonction :

void * traitement(structP param)
{
static int 	vr = 1000;
int 		hdFich;
int		cpt = 0;
int		i = 0;
char     	szDonnee[6];

//Ouverture du fichier
puts("th>Ouverture du fichier");

while (i != 20)

  	{
  		hdFich = open("data.txt",O_RDWR);
  		lseek(hdFich,i*sizeof(szDonnee)-1,SEEK_CUR); 
  		puts("th>Lecture dans le fichiern");
  		read(hdFich,&szDonnee,sizeof(szDonnee));

	if(strcmp(szDonnee,"printf") == 0)
	{
		cpt ++;
	}

 		printf("th>Chaine : %sn",szDonnee);

 		close(hdFich); 
 		i++;	
  	}
  	printf("Le mot a ete trouve %d fois !n",cpt);
pthread_exit(&vr);
}

Et le résultat :

Creation du premier thread fils

th>Ouverture du fichier

th>Lecture dans le fichier

th>Chaine : printf

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

th>Lecture dans le fichier

th>Chaine : fprint

Le mot a ete trouve 0 fois !

Valeur renvoyee par le thread secondaire = 1000

Fin ...

Si vous pouvez m'aider, ce serait bien sympathique :/

(Mon fichier data.txt contient des printf partout :p)

Lien à poster

La fonction strcmp compare deux chaînes de caractères terminées par un caractère nul. Or ton tableau szDonnee contient juste les 6 caractères lus depuis le fichier, rien ne garantie la présence d'un 0 final. Tu devrais plutôt utiliser strncmp (ou ajouter un 0 à la fin du tableau).

Lien à poster

deja ton appel de thread est pas tres bon. Tu ne peux passer qu'un pointeur au thread donc tu devrais avoir un prototype du genre

int *monthread(void *monparam)

et ensuite faire un truc du genre : struct mastructure *p = (struct mastructure *)monparam;

pourquoi ne pas utiliser les primitives haut niveau pour ouvrir et lire ton fichier : fopen, fclose, fread...

http://www.cplusplus.com/fopen

c'est plus recommandé pour une meilleur portabilité en plus.

Lien à poster

a quoi sert la declaration static int vr ?? surtout si tu la retourne a la fin du thread ?

Pourquoi ouvrir 20 fois le fichier ?? une fois suffit.

Ton code ne permet pas de lire le fichier completement en plus. en gros il ne lit que 20*6 octets au maximum

Lien à poster
×
×
  • Créer...