Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [c/c++] estrarre link da un file di testo

    ciao,
    avrei la necessità di estrarre i link contenuti in una pagina HTML senza scomodare le espressioni regolari in quanto non ho a disposizione una libreria; esiste una qualche implementazione già fatta?


    grazie

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Se cerchi qualche implementazione già fatta cerchi una libreria
    Comunque non è una cosa banale.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    codice:
        char *ps = &HTML_Txt[0]; // Il buffer del testo in entrata.
        char *pLinkStr = &buf[0];  // Un buffer preimpostato che riceverà il link.
    
    
        if (ps)
        {
            while (*ps)
            {
                if ( *ps == 'h'
                && *++ps == 'r'
                && *++ps == 'e'
                && *++ps == 'f' )
                {
                    while (*ps != '"') // Scarta '=' spazi e virgolette...
                        ps++;
                        
                    while (*ps == '"') // Copia la stringa di testo del link.
                        *pLinkStr++ = *ps++;
                }
    
                ps++;
            }
        }


    ...è solo una idea, non so neppure se funziona, poi bisogna aumentare i controlli per verificare che ad ogni incremento di ps non si incontri il terminatore nullo.
    Ultima modifica di Paulin; 12-11-2014 a 13:08

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Tecnicamente href può essere usato in tag diversi da a, inoltre non necessariamente con tiene un link.

    Comunque a questo punto tanto vale usare un po' di funzioni di libreria
    codice:
    #include <stdio.h>
    #include <string.h>
    
    
    int main(void) {
        char *input = "<a href=\"...\">asd</a><a href=\",,,\"></a>", 
             *init,
             *end,
             buff[256];
        int len;
        init = strstr(input, "href");
        while(init!=NULL) {
            init = strchr(init, '"')+1;
            end = strchr(init, '"');
            len = end-init;
            strncpy(buff, init, len);
            buff[len] = '\0';
            printf("%s\n", buff);
            init = strstr(end, "href");
        }
        return 0;
    }
    edit. volendo si può trasformare in una funzione à la strtok
    Ultima modifica di Scara95; 12-11-2014 a 14:02
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie per gli esempi, vedo che anche senza scomodare le espressioni regolari si riesce ad estrarre i link, li proverò entrambi.
    Un dubbio: che differenza vi è tra indirizzi del tipo http:\\www.miosito.com e http:\\miosito.com ????

    grazie

  6. #6
    Che puntano a due domini diversi... (anche se molti aggiungono un qualche genere di redirect)
    (per inciso, negli URL gli slash sono in avanti... http://, non http:\\)
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    ops, hai ragione, ho scritto senza pensarci: effettivamente facendo ping www.google.it e google.it si ottengono due IP diversi però forse si potrebbe avere stesso IP ed n domini diversi

    grazie

  8. #8
    Certo, sono i cosiddetti "virtual hosts"... Ma che c'entra con la domanda iniziale?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Certo, sono i cosiddetti "virtual hosts"... Ma che c'entra con la domanda iniziale?
    scusate, ho approfittato per un approfondimento

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.