1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
int main (int argc, char **argv)
{
if(argc != 2)
{
printf("USAGE: %s [0] = NetworkName ; [1] = NodeType ; [2] = IPv6 Addr \n", argv[0]);
exit(-1);
}
int err;
int i, iLigne = atoi(argv[1]);
regex_t preg;
char *str_request = NULL;
const char *str_regex = "\"(.*)\"";
FILE *fp = fopen ("data.txt", "r");
if (fp != NULL)
{
for (int i=0; i<=iLigne; i++) {
str_request = fgets (ligne, sizeof ligne, fp);
}
fclose (fp);
}
else
{
printf ("Erreur d'ouverture du fichier\n");
}
err = regcomp (&preg, str_regex, REG_EXTENDED);
if (err == 0)
{
int match;
size_t nmatch = 0;
regmatch_t *pmatch = NULL;
nmatch = preg.re_nsub;
pmatch = malloc (sizeof (*pmatch) * nmatch);
if (pmatch)
{
match = regexec (&preg, str_request, nmatch, pmatch, 0);
regfree (&preg);
if (match == 0)
{
char *site = NULL;
int start = pmatch[0].rm_so + 1;
int end = pmatch[0].rm_eo - 1;
size_t size = end - start;
site = malloc (sizeof (*site) * (size + 1));
if (site)
{
strncpy (site, &str_request[start], size);
site[size] = '\0';
printf ("%s\n", site);
free (site);
}
}
else if (match == REG_NOMATCH)
{
printf ("%s n\'est pas une data valide\n", str_request);
}
else
{
char *text;
size_t size;
size = regerror (err, &preg, NULL, 0);
text = malloc (sizeof (*text) * size);
if (text)
{
regerror (err, &preg, text, size);
fprintf (stderr, "%s\n", text);
free (text);
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
exit (EXIT_FAILURE);
}
}
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
exit (EXIT_FAILURE);
}
}
return (0);
} |
Partager