Avatar billede noden Nybegynder
20. maj 2004 - 22:01 Der er 7 kommentarer og
1 løsning

Funktion til at udtrække bestemte data fra en stor char buffer

Jeg har en:
char buffer[1024] // Ikke nødvendigvis denne størrelse

og skal bruge en funktion:
char ** get_it(buffer);

Funktionen skal kunne tage min buffer som argument og skal returnere et array af strenge: (0 eller flere)

adresse.dk
andenadresse.com
...
NULL

De data som er i bufferen er html og adresserne kommer fra anchor tags <a href="DataJegSkalBruge">

Håber der er nogen som vil bruge tiden på det da jeg ikke lige kan få det til at gøre som jeg vil!
Jeg skal nok svare på tillægsspørgsmål.
Avatar billede arne_v Ekspert
20. maj 2004 - 22:40 #1
Et forslag:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define MAXURL 50
#define MAXURLLEN 100

static char *retbuf[MAXURL];

static char ahref[] = "<A HREF";

char **parse(char *s)
{
  int i;
  int ix;
  int len;
  char *p;
  char *s2;
  len = strlen(s);
  s2 = (char *)malloc(len+1);
  for(i=0;i<len;i++) s2[i] = toupper(s[i]);
  s2[len] = '\0';
  ix = 0;
  p = s2;
  while((p = strstr(p,ahref)) != NULL)
  {
      retbuf[ix] = (char *)malloc(MAXURLLEN);
      p += sizeof(ahref);
      p++;
      len = strcspn(p,"\"'");
      strncpy(retbuf[ix],s+(p-s2),len);
      retbuf[ix][len] = '\0';
      p += (len + 2);
      ix++;
  }
  retbuf[ix] = NULL;
  free(s2);
  return retbuf;
}

int main()
{
  char *s = "...<A HREF=\"http://www.aaa.dk\">...<a href='http://www.bbb.dk'>...";
  char **p = parse(s);
  while(*p)
  {
      printf("%s\n",*p);
      p++;
  }
  return 0;
}
Avatar billede arne_v Ekspert
20. maj 2004 - 22:41 #2
Det er lidt noget fedte kode, men det håndterer ihverfald både store/små bogstaver
i A HREF og både "" og ''.
Avatar billede arne_v Ekspert
20. maj 2004 - 22:44 #3
Jeg bruger en NULL til at markere at der ikke er flere URL'er.

Det er kalderens opgave at free'e URL'erne (det gør min main ovenfor ikke).

Det er ren C. Virker selvfølgelig også i C++. Men man kunne sagtens lave det med
STL string og returnere en STL vector.
Avatar billede noden Nybegynder
20. maj 2004 - 22:44 #4
Det er nok fino til mig!
Jeg tjekker den lige og så får du dine point!!
Avatar billede arne_v Ekspert
20. maj 2004 - 22:46 #5
Den pæne løsning var nok noget regular expressions !
Avatar billede noden Nybegynder
20. maj 2004 - 22:47 #6
Du tænker på retbuf[] som skal frigøres?
Avatar billede noden Nybegynder
20. maj 2004 - 22:49 #7
Jeg har aldrig været god til at håndtere strenge men jeg burde jo nok sætte mig ind i den nye <string> i STL!
Jeg havde selv lavet en masse nestede løkker og if´s!
Det var noget .. og så virkede det ikke! Hehe!
Men takker meget!
Avatar billede arne_v Ekspert
20. maj 2004 - 22:50 #8
med free i main:

int main()
{
  char *s = "...<A HREF=\"http://www.aaa.dk\">...<a href='http://www.bbb.dk'>...";
  char **p = parse(s);
  while(*p)
  {
      printf("%s\n",*p);
      free(*p);
      p++;
  }
  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester