begin process at 2010 02 09 20:14:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > PARSER IRC 2

PARSER IRC 2


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : bustarhy

Ecrire un message privé
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.


 Sources du même auteur

Source avec Zip CLAVIER TELEPHONE
PARSER IRC

 Sources de la même categorie

Source avec Zip RECHERCHE D'ANNAGRAMMES par Torin
GESTION DE CHAINE DE CARACTÉRE EN C++ AVEC NSTRING par xmustapha
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript
Source avec Zip ANALYSEUR SYNTAXIQUEV(0.1) par kohan95

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CLIENT IRC BASIQUE par king67
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel
Source avec Zip Source avec une capture CLIENT IRC SIMPLE AVEC DEV-CPP par TeniX
Source avec Zip INI PARSER FLEX++ / BISON++ par neria
PARSER IRC par bustarhy

Commentaires et avis

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?

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

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 .....

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.

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

OK, source dé-supprimée

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.

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

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

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,496 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales