myTribu::reb0rn Search Members Help Calendar
Welcome Guest .:: Log In :: Register ::. .:: Resend Validation Email  

Reply to this topicStart new topicStart Poll

> [C++] Need help: coder un parser

Deather

CALLBACK
***************
Group: Administrateu(r|se)
Posts: 683
Member No.: 3
Joined: 28-December 03

Posted: Sep 11 2004, 23:40 PM   Quote Post 

Salut,
Voilà, ça fais une semaine que je bloque là dessus. Pourtant ça doit pas être sorcier ...
Si qqun se sent d'attaque pour m'aider à en coder un avec les fstreams ou les FILE, qu'il se fasse connaitre :-)

Il faut simplement arriver à faire la difference entre une ligne classique et une ligne commenceant par "#".
Le reste je suis capable de le faire ;-)

 PMEmail Poster  Top

DarkPepper

DWORD
********
Group: T4C Joueu(r|se)
Posts: 71
Member No.: 30
Joined: 10-August 04

Posted: Sep 12 2004, 03:56 AM   Quote Post 

code ascii de #?
%c ..., 125 par ex???


____________________
user posted image

 PMEmail Poster  Top

Deather

CALLBACK
***************
Group: Administrateu(r|se)
Posts: 683
Member No.: 3
Joined: 28-December 03

Posted: Sep 12 2004, 10:26 AM   Quote Post 

Ouais le code ASCII de ce truc pourrait peut être m'aider,
en fait au départ, le parser recherche l'ID de l'item voulu avec un scanf. L'ID est le premier nombre sur la ligne dont je met un int au départ, or # n'en est pas un, donc je sais pas trop comment m'y prendre
j'ai déjà essayer de faire (int)"#" (un cast) ou alors printf("%i","#"); pour afficher sa valeur en int, mais rien de tout ça ne marche :-p

 PMEmail Poster  Top

Deather

CALLBACK
***************
Group: Administrateu(r|se)
Posts: 683
Member No.: 3
Joined: 28-December 03

Posted: Sep 12 2004, 10:48 AM   Quote Post 

Je pense avoir trouvé la solution à mon problème:

CODE
/*
* Ce programme sert à identifier la valeur d'un caractère ou d'une touche
*
*/

#include <string.h>
#include <curses.h>

void main(void)
{
char *str;

initscr();  //Initialise le mode ncurses; On affiche pas d'écho local
keypad(stdscr,TRUE); //On active toute les touches du clavier
curs_set(3);  //On désactive le curseur

while(1)
{
 clear();   //Efface l'écran
 printw("Entrez le caractère: ");
 str = getch();
 printw("\nInt:%i  |  Char:%c\nAppuyez sur une touche ...",str,str);
 getch();
}
}


Voilà, d'après ce programme, # équivaut à 35 :-)

 PMEmail Poster  Top

Deather

CALLBACK
***************
Group: Administrateu(r|se)
Posts: 683
Member No.: 3
Joined: 28-December 03

Posted: Sep 12 2004, 11:54 AM   Quote Post 

YES :-) J'ai trouvé, ça marche !! :-)
Voici le code qui marche:
CODE
int GetTotalItems(void)
{
char t_Line[200];
int Number=0;
int ID;
int Tmp;

fstream fp;


fp.open("ItemDatabase.dat", fstream::in);

while((fp.eof())==FALSE)  //Tant qu'on est pas à la fin du fichier
{
 fp.getline(t_Line,200);
 ID=0;
 sscanf(t_Line,"%i",&ID);
 if(ID>=1&&ID<=400)
  Number++;
}

fp.close();

return Number;
}


Le problème était le suivant, lorsque qu'une ligne vide était trouvée, il ne touchais pas à la valeur de ID, même chose quand il tombais sur un # car c'est pas un Int, donc ID ne bougait pas. Ce qui veut dire qu'après être tombé sur un item, ID gardait sa valeur et donc il comptait des items en trop :/

Donc voilà, j'ai rajouté ID=0; avant le scanf et ça marche :-)

Merci quand même pour votre aide!

 PMEmail Poster  Top

DarkPepper

DWORD
********
Group: T4C Joueu(r|se)
Posts: 71
Member No.: 30
Joined: 10-August 04

Posted: Sep 12 2004, 12:08 PM   Quote Post 

LOL j'ai a peine eu le tps de prendre ma table ascii que tu as trouvé ! c pooo juste


____________________
user posted image

 PMEmail Poster  Top

Deather

CALLBACK
***************
Group: Administrateu(r|se)
Posts: 683
Member No.: 3
Joined: 28-December 03

Posted: Sep 12 2004, 12:09 PM   Quote Post 

Bah à chaque fois que je poste pour demander de l'aide je trouve pas longtemps après :-p
J'vais me créer un forum ou j'serait tout seul :-D

 PMEmail Poster  Top

 1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

Reply to this topicStart new topicStart Poll

 


Top