Appello Settembre 2008: URL
Lo scopo del progetto è riconoscere gli URL (Uniform Resource Locator) presenti in un file di testo (più precisamente, una forma ristretta di URL).
Classifichiamo i caratteri in due classi:
- caratteri separatori: sono considerati separatori i seguenti caratteri: lo spazio (' '), il carattere di tabulazione ('\t'), il carattere di a capo ('\n'), il carattere di ritorno carrello ('\r'), e i caratteri di interpunzione virgola (',') e punto-e-virgola (';');
- caratteri non separatori: tutti gli altri.
Un file di testo si può considerare un'alternanza di sequenze di caratteri non separatori e di sequenze di caratteri separatori. Le sequenze massimali di caratteri non separatori sono chiamate parole. Si noti che, per come abbiamo definito i separatori, pippo. è una parola (punto incluso!).
Ad esempio, nel seguente testo:
.ecco un esempio di testo composto da parole, spazi. E da tante altre cose come http://url.com/ elettronica ecc.
Le parole sono ".ecco", "un", "esempio", "di", "testo", "composto", "da", "parole", "spazi.", "E", "da", "tante", "altre", "cose", "come", "http://url.com/", "elettronica", "ecc.".
Fra le parole, particolare importanza hanno per noi gli URL. Una parola è un URL se e solo se soddisfa le seguenti proprietà:
- inizia con la stringa "http://" o "https://";
- prosegue con una stringa non vuota formata da lettere minuscole (da 'a' a 'z'), lettere maiuscole (da 'A' a 'Z'), cifre (da '0' a '9'), trattini ('-'), underscore ('_') e punti ('.'), con la condizione che né il primo né l'ultimo carattere possono essere punti;
- termina con una stringa non vuota formata da lettere minuscole (da 'a' a 'z'), lettere maiuscole (da 'A' a 'Z'), cifre (da '0' a '9'), trattini ('-'), underscore ('_'), punti ('.') e barre ('/'), con la condizione che il primo carattere deve essere una barra.
Alcuni esempi di parole che non sono URL:
- http://città.com/ non è un URL perché contiene un carattere non consentito (à);
- fiat.it non è un URL perché non comincia con http:// o https://;
- http://mamma.mia./uffa.html non è un URL perché la seconda parte termina con un punto;
- http://.mamma.mia/uffa.html non è un URL perché la seconda parte inizia con un punto;
- https://mamma.mia non è un URL perché la terza parte è vuota;
- https://mamma/mamma^mia non è un URL perché il segno circonflesso non è tra i caratteri consentiti nella terza parte.
Viceversa, ad esempio, http://uffa.it/mamma.html, https://x.y.z/ e http://a/b/c sono URL.
Dovete scrivere un programma che, dato un file di testo, individui al suo interno tutti e soli gli URL, e li emetta in output nell'ordine in cui li trova.
File di input
Il file input.txt contiene un testo. Non vi sono vincoli sulla lunghezza del testo, né sulla lunghezza delle righe di cui è composto. Le parole di cui il testo è composto, viceversa, sono tutte di lunghezza minore o uguale a 100 caratteri.
File di output
Il vostro programma deve scrivere un file di nome output.txt. Il file conterrà tante righe quanti sono gli URL contenuti nel file di input. Ogni riga contiene un singolo URL, terminato da un a-capo, e nessun altro carattere.
Gli URL che compaiono nel file devono essere nello stesso ordine in cui compaiono nel testo (dall'alto in basso, da sinistra a destra).
Esempio di input/output
File input.txt
Questo, per esempio, è un http://url.valido/, mentre https://questo.non.lo./+, sia perché la seconda parte termina con un punto, sia perché contiene una "e" accentata. Per contro,http://vigna.dsi.unimi.it/music.php così come http://-.-/_._ vanno bene.
File output.txt
http://url.valido/ http://vigna.dsi.unimi.it/music.php http://-.-/_._