Récuperer une chaine 3 caractère dans une chaine de caractère ?

Atomos83 Messages postés 33 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 10 novembre 2006 - 31 janv. 2006 à 15:50
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 - 31 janv. 2006 à 18:37
Bonjour, alors voila je vous expose mon problème :
Je doit scanner un fichier, chaque ligne du fichier est de a meme forme, seul les 3 dernieres caractère varient, par exemple :

00100001
00100002
00100003

J'aimerais justement extraire ces 3 caractères mais je block,
j'ai 2 soucis,
Le premier, j'ai fait une boucle qui me lit mon fichier ligne par ligne jusqu'a la fin ... mais il ne s'arrete pas a la fin, il continue indéfiniment !

Le second est que je ne sait pas du tout comment procéder pour récupérer ces 3 caractères, en VB j'aurais fait un right mais la ...

Si vous pouvez m'aider, merci beaucoup, @t0 !

10 réponses

Atomos83 Messages postés 33 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 10 novembre 2006
31 janv. 2006 à 15:51
Edit, voila le debut de mon code ...

main()
{
FILE *mon_fichier;
char *lecture[51];
int i;

mon_fichier= fopen("ca_art.dat","r");

while((fgets(lecture,51,mon_fichier))!=EOF)
{
printf("%s",lecture);
}
}

Merci !
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
31 janv. 2006 à 16:25
char *lecture[51]; // TABLEAU DE POINTEURS ???
char lecture[50]; // ça c'est un buffer


une chaine finit par un zéro en C, ok ?
char *c; // ICI OUI QUE JE VEUX UN POINTEUR
c = lecture; // POINTE SUR TON BUFFER
while(*c) c++; // VA A LA FIN, LE ZERO FINAL
strcpy(bufferDestination, c - 3); // J'AI FINI, YOUPI

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Atomos83 Messages postés 33 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 10 novembre 2006
31 janv. 2006 à 16:34
Alors, je suis noob en C, et je n'ai donc franchement pas compris du tout ton explication ... si tu pourrais réexpliquer plus ... simplement ?
Merci a toi
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
31 janv. 2006 à 16:51
dis où ça te pose problème car je ne vois pas ce qui peut en poser.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
31 janv. 2006 à 17:05
Lol



Si tu es habitué au right du VB il y a cette fonction trouvée je sais
pas ou, elle est plus bordelique que celle a Brunews mais tu auras pas
de mal a t en servir.



char *C_RIGHT(char *texte, int nbre_caracteres) {

static char resultat[80];

if (nbre_caracteres > 0 && nbre_caracteres < (int)strlen(texte) ) {

strncpy(resultat,texte + (strlen(texte) - nbre_caracteres), nbre_caracteres);

resultat[nbre_caracteres] = '\0';

}

return resultat;

}
0
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 1
31 janv. 2006 à 17:09
essay ceci:

FILE *mon_fichier;

char lecture[51];
char cara;
int i=0;

mon_fichier = fopen("ca_art.dat","r");

while(feof(mon_fichier) == 0)
{
fscanf(mon_fichier,"%c",&cara);
lecture[i]=cara;

if (cara == '\n')
{
//Les trois derniere lettre etait
printf("%c",lecture[i-3]);
printf("%c",lecture[i-2]);
printf("%c",lecture[i-1]);
i=0;
}
i++;

printf("%c",cara);
}
0
Atomos83 Messages postés 33 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 10 novembre 2006
31 janv. 2006 à 17:45
Merci pour ta reponse tenix, mais en faite, j'aimerais faire un test SUR les 3 derniers caractères,

c'est a dire que, un exemple :



Si les 3 derniers caractères sont egales a 203 , alor j affiche la phrase entiere



J'ai essayer, en recuperant ton code source de faire un :





if(lecture[i-3]==2 && lecture[i-2]==0 && lecture[i-1]==0)

{

printf("%c",cara);

}



Mais cela ne marche pas,



Merci encore pour vos répose ...
0
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 1
31 janv. 2006 à 18:22
essay :

if(lecture[i-3]==(char)2 && lecture[i-2]==(char)0 && lecture[i-1]==(char)0)
{
printf("%c",cara);
}
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
31 janv. 2006 à 18:31
if(lecture[i-3] == '2' etc...

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 1
31 janv. 2006 à 18:37
Oué voila comme BruNews l'a mit faut metre les ' ' car tu compare des caractére

:)
0