Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PARSER IRC 2


Information sur la source

Catégorie :Chaîne de caractères Classé sous : parser, irc Niveau : Débutant Date de création : 13/12/2006 Vu : 2 655

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

salut a tous.ce code permet de determiner les elements d'un message irc et de les ecrires dans une structure.bien pratique pour' l'ecriture d'un bot.tester sur mon bot ca marche nickel.(p3 400 mhz).
 

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>
  • typedef struct IRCLINE
  • {
  • char sender[64]; // :jack!busta@aol-C490E8E0 ou :irc.aol.com
  • char action[8]; // PRIVMSG JOIN PART etc....
  • char message[512]; // : salut mon gars
  • char channel[32]; // #chanell
  • char nick[32]; // bustabot
  • char numeric[4]; // 401 succeful joined
  • char mode[16]; // +MmuCcRitpv
  • }IRCLINE;
  • int IsUpperCase(char chaine[]){
  • int i=0;
  • while(chaine[i]!= '\0'){
  • if(chaine[i] < 'A' || chaine[i] > 'Z') return 0;
  • i++;
  • }
  • return 1;
  • }
  • int IsNumeric(const char number[]){
  • int i=0;
  • while(number[i]!='\0'){
  • if(number[i] < '0' || number[i] > '9') return 0;
  • i++;
  • }
  • return i == 3 ?1 : 0;
  • }
  • int parseline(const char ircline[BUFSIZ],char tab[][512]){
  • int nb_mot=1,i=0,j=0;
  • char *pointeur,*buffer;
  • buffer = strdup(ircline);
  • pointeur = strtok( buffer, " " );
  • strcpy(tab[0],pointeur);
  • while( pointeur != NULL ) {
  • pointeur = strtok( NULL, " " );
  • if ( pointeur != NULL ) {
  • nb_mot++;
  • strcpy(tab[nb_mot-1],pointeur);
  • }
  • }
  • /*********** on 'recolle' la partie message ******************/
  • for(i=1;i<(nb_mot+1);i++){
  • if(tab[i][0]==':'){
  • for(j=1;j<(nb_mot-i);j++){
  • strcat(tab[i]," ");
  • strcat(tab[i],tab[i+j]);
  • strcpy(tab[i+j],"\0");
  • }
  • }
  • }
  • return nb_mot-(j-1);
  • }
  • void GetIrcParam(const char imgline[],IRCLINE* irc){
  • int nb_mot=0,i=0,j=0;
  • char tab[10][512];
  • memset(&tab, 0, sizeof(tab));
  • nb_mot=parseline(imgline,tab);
  • if(nb_mot==2){
  • strcpy(irc->action,tab[0]);
  • strcpy(irc->message,tab[1]+1);
  • }
  • else {
  • strcpy(irc->sender,tab[0]+1);
  • for(i=1;i<(nb_mot);i++){
  • if(IsUpperCase(tab[i]))strcpy(irc->action,tab[i]);
  • //else if(IsNumeric(tab[i]))infoirc.numeric=atoi(tab[i]);
  • else if(IsNumeric(tab[i]))strcpy(irc->numeric,tab[i]);
  • else if(tab[i][0]=='#')strcpy(irc->channel,tab[i]);
  • else if(tab[i][0]==':')strcpy(irc->message,tab[i]+1);
  • else if((tab[i][0]==('-'))||(tab[i][0]=='+'))strcpy(irc->mode,tab[i]);
  • else {
  • if(tab[i][0]!='@')strcpy(irc->nick,tab[i]);
  • }
  • }
  • }
  • }
  • int main(){
  • const char line[]=":jack!busta@aol-C490E8E0 TOPIC #bustabot :salut busta";
  • IRCLINE infoirc;
  • memset(&infoirc, 0, sizeof(infoirc));
  • GetIrcParam(line,&infoirc);
  • printf("Sender %s\n"
  • "Action %s\n"
  • "Message %s\n"
  • "Channel %s\n"
  • "Nick %s\n"
  • "Numeric %s\n"
  • "Mode %s\n",infoirc.sender,infoirc.action,infoirc.message,infoirc.channel,infoirc.nick,infoirc.numeric,infoirc.mode);
  • getch();
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct IRCLINE
{
	char sender[64]; // :jack!busta@aol-C490E8E0 ou :irc.aol.com
	char action[8]; // PRIVMSG JOIN PART etc....
	char message[512]; // : salut mon gars
	char channel[32];  // #chanell
	char nick[32];    // bustabot
	char numeric[4]; // 401 succeful joined
	char mode[16];  // +MmuCcRitpv
}IRCLINE;

int IsUpperCase(char chaine[]){
    int i=0;
    while(chaine[i]!= '\0'){
    if(chaine[i] < 'A' || chaine[i] > 'Z') return 0;
    i++;
    }  
    return 1;
}

int IsNumeric(const char number[]){
    int i=0;
    while(number[i]!='\0'){
                         if(number[i] < '0' || number[i] > '9') return 0;                  
                          i++;
    }
    return i == 3 ?1 : 0;
}

int parseline(const char ircline[BUFSIZ],char tab[][512]){

	int     nb_mot=1,i=0,j=0;     
	char    *pointeur,*buffer;
     
	buffer = strdup(ircline); 
	pointeur = strtok( buffer, " " );
	strcpy(tab[0],pointeur);
	
	while( pointeur != NULL ) {	
		
		pointeur = strtok( NULL, " " ); 
		if ( pointeur != NULL ) { 
			nb_mot++; 
			strcpy(tab[nb_mot-1],pointeur);  
		} 

	}
	/*********** on 'recolle' la partie message ******************/
	for(i=1;i<(nb_mot+1);i++){
       if(tab[i][0]==':'){
         for(j=1;j<(nb_mot-i);j++){
         strcat(tab[i]," ");                         
         strcat(tab[i],tab[i+j]);
         strcpy(tab[i+j],"\0");
         }
       }
    }
    
	return nb_mot-(j-1);  
}

void GetIrcParam(const char imgline[],IRCLINE* irc){
    
    int nb_mot=0,i=0,j=0;
    char tab[10][512];
    memset(&tab, 0, sizeof(tab));
    nb_mot=parseline(imgline,tab);
    if(nb_mot==2){
            strcpy(irc->action,tab[0]);
            strcpy(irc->message,tab[1]+1);
        }
    else {
          strcpy(irc->sender,tab[0]+1);
                  for(i=1;i<(nb_mot);i++){                  
                              if(IsUpperCase(tab[i]))strcpy(irc->action,tab[i]);
                              //else if(IsNumeric(tab[i]))infoirc.numeric=atoi(tab[i]);
                              else if(IsNumeric(tab[i]))strcpy(irc->numeric,tab[i]);
                              else if(tab[i][0]=='#')strcpy(irc->channel,tab[i]);
                              else if(tab[i][0]==':')strcpy(irc->message,tab[i]+1);
                              else if((tab[i][0]==('-'))||(tab[i][0]=='+'))strcpy(irc->mode,tab[i]);
                              else {
                                   if(tab[i][0]!='@')strcpy(irc->nick,tab[i]);
                                   }
                  }
            }
                  
    
}

int main(){
    const char line[]=":jack!busta@aol-C490E8E0 TOPIC #bustabot :salut busta";
    IRCLINE infoirc;
    memset(&infoirc, 0, sizeof(infoirc));
    GetIrcParam(line,&infoirc);

    printf("Sender %s\n"
           "Action %s\n"
           "Message %s\n"
           "Channel %s\n"
           "Nick %s\n"
           "Numeric %s\n"
           "Mode %s\n",infoirc.sender,infoirc.action,infoirc.message,infoirc.channel,infoirc.nick,infoirc.numeric,infoirc.mode);

    
    getch();
    return 0;
}
    
    

Conclusion

il reste quelques modification a faire pour ameliorer le code.je travail toujours dessus.c'est juste un code temporaire.
 

Commentaires et avis

signaler à un administrateur
Commentaire de LordBob le 13/12/2006 17:51:57

quelle est la différence avec ta source précédente, pourquoi ne pas avoir fait simplement la mise a jour de la source précédente, plutot que d'en poster une nouvelle?

signaler à un administrateur
Commentaire de vecchio56 le 13/12/2006 18:18:52 administrateur CS

Effectivement la fonction mise a jour n'est pas la pour décorer
J'ai supprimé l'ancienne source

signaler à un administrateur
Commentaire de Kirua le 14/12/2006 13:24:31

C'est un peu radical, compte tenu des commentaires qu'il y avait sur la précédente .....

signaler à un administrateur
Commentaire de bustarhy le 14/12/2006 15:26:09

ya une difference majeur dans le code.la premiere source parsait la partie message "vue" sur le channel irc afin d'en faire des parametre tel argc argv sous irc avec un bot.celle ci ne fait pas ca du tout.elle identifie les action,sender,message,topic etc...bref a 1ere vue aucune difference pour quelq'un qui ne code rien utilisant irc.mais une difference majeur pour ceux qui connaissent.
en gros prenons cette ligne
const char line[]=":jack!busta@aol-C490E8E0 TOPIC #bustabot :salut busta";
le premier code parsait ce qu'il y a apres les :,cad salut busta pour en faire 2 param.pour en faire des commandes par la suite tel que : :join #channel.
ce code est tout a fait different en terme de fonctionnalité.car il identifie qui envoi le message.quel action est faites.le numero associer a l'action.etc....
bref je trouve que votre reaction a été bien vive sans vraiment regarder a quoi correspond le code.

signaler à un administrateur
Commentaire de vecchio56 le 14/12/2006 18:27:15 administrateur CS

OK, source dé-supprimée

signaler à un administrateur
Commentaire de bustarhy le 14/12/2006 18:30:17

merci,ca reste assez ressemblable car j'utilise la fonction du 1 mais l'objectif reste different et je reste assez brancher irc donc les codes qui suivront seront aussi un peu du meme genre,je reprenderai meme ces codes pour illustrer leurs utilisation dans un projet final.merci de ta comprehention.

signaler à un administrateur
Commentaire de vecchio56 le 14/12/2006 18:32:12 administrateur CS

Essaie quand même de varier un peu les titres si possible

signaler à un administrateur
Commentaire de bustarhy le 14/12/2006 18:33:51

oki je ferai de mon mieux.de tout facon le code sur lequel je travail de suite est un code qui n'a rien a voir avec irc.histoire de changer un peu et que les gens ne pensent que ne sachent faire que ca lol.ca changera un peu lol.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

client IRC ?? [ par crAzYJoJoo ] Slt, je cherche le code source d'un client irc pour voir comment ca marcheest ce que qq1 sait ou je peux trouver ca ?merci d'avance ++ bot irc [ par Nano ] quelqu'un pourait me donner la source d un bot irc simple fait avec visual c++Merci d'avance parser xml en C [ par jbt36 ] bonjour à tous,j'ai besoin de realiser un editeur xml en Cpour cela je dois notamment parser le fichier xml pour pouvoir le manipuler,l'affichersous f Client IRC [ par SAtaN ] quelqu'un aurait il un tutoriel, des infos, pour m'aider à creer un client IRC ???PS : j'utilise Borland C++a+ IRC server [ par spyirc ] je cherche des sourec pou un IRC server plz help me :p tns :) server irc [ par belka ] je voudrai programmer un serveur irc en c++ est je ne sais pas par ou commencer,svp, si vous avez une adresse d'un site ou un code source pour que je IRC [ par Melfos ] Chui un newbie et alors ?salut a tous, je voudrais programmer un bot irc et je voudrai savoir si on peu me passer des liens, des docs ou autre qui exp surcharge de l'operateur ">>" du cin [ par pounch ] bon voila mon problemej'aimerai parser une ligne de commande grace au cin et afficher un prompt lorsque j'ai fini de parser. Mais le cin n'a pas de me C++ Builder: Client irc (a laide!) [ par Psyc0s ] Bon je suis en train de faire un client irc avec C++ builder Mais le socket ne veux pas envoyer les message au serveur:(La connexion au serveur foncti Variables comme IRC [ par Tidam ] Voila je debute le C++ apres avoir fait beaucoup d'IRC(bot pickup automatique #PickupCs (vive la pub ;)))et je voudrais savoir si il existe en c++ un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.