Advertisement
Guest User

ersfwerwera

a guest
Oct 30th, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void rtrim(char *str)
  2. {
  3.   size_t n;
  4.   n = strlen(str);
  5.   while (n > 0 && isspace((unsigned char)str[n - 1])) {
  6.     n--;
  7.   }
  8.   str[n] = '\0';
  9. }
  10.  
  11. typedef struct {
  12.   char *user;
  13.   char *topic;
  14.   char *error;
  15. } topic_match;
  16.  
  17. /*
  18.  * tämän siis PITÄIS palauttaa ennemmin viesti tyyliin "topikki <topik> löyty ja sen laitto käyttäjä <käyttäjä>"
  19.  * mut vitun sprintf aiheuttaa virheitä (sen takia myös regcomp ei suostunu toimimaan!)
  20.  * toimii mut mut ihan vitun vammasta paskaa
  21.  * tää lukee topicit tekstitiedostosta jossa ne on tyyliin <käyttäjä>\t<topic>\n
  22.  */
  23. topic_match find_topic_match(char *search) {
  24.     printf("search %s\n",search);
  25.     regex_t regex;
  26.     int reti;
  27.     char *pattern = "(\\b|[!:.,])";
  28.     int total_len = 2*strlen(pattern)+strlen(search)+1;
  29.     /* pitäs onnistua varmaan ilman malloccia sprintf:llä, mutta..*/
  30.     char *str = (char *)malloc(total_len);
  31.     strcat(str,pattern);
  32.     strcat(str,search);
  33.     strcat(str,pattern);
  34.     printf("str: %s\n",str);
  35.    
  36.     /*mitä helvetitä, kun pistin ton formatin ja searchin sprintf:llä char * tyyliseen muuttujaan nii regcomp ei onnistunu
  37.      * vittu miten vammasta, nyt kuitenkin toimii*/
  38.     reti = regcomp(&regex,str,REG_EXTENDED);
  39.      
  40.     FILE *file;
  41.     char line[300];
  42.     file = fopen("topicit.txt","r");
  43.    
  44.     topic_match match;
  45.     match.user="";
  46.     match.topic="";
  47.    
  48.     while(fgets(line,300,file) != NULL) {
  49.         rtrim(line);
  50.         /* jos vikalla rivillä on vaan tyhjämerkkejä jostain syystä nii turha parsia useria ja topiccia */
  51.     if(strlen(line) == 0) {
  52.         break;
  53.     }
  54.    
  55.     char *user = strtok(line,"\t");
  56.     char *topic = strtok(NULL,"\t");
  57.     printf("topic: %s user: %s\n",topic,user);
  58.     reti = regexec(&regex,topic,0,NULL,0);
  59.    
  60.     if(!reti) {
  61.         match.user = user;
  62.         match.topic = topic;
  63.         match.error = "";
  64.         break;
  65.     }
  66.     }
  67.    
  68.     fclose(file);
  69.     free(str);
  70.     regfree(&regex);
  71.    
  72.     if(strlen(match.topic) == 0) {
  73.         match.error = "not found!";
  74.     }
  75.  
  76.     return match;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement