PDA

View Full Version : [JAVA] Cosa devo fare per...


DonDepo
26-08-2008, 09:33
Salve a tutti, vorrei chiedervi aiuto per risolvere questo problema. Ho 2 file di testo. Nel primo ho 2 colonne: la prima contiene numeri identificativi. La seconda contiene url. Anche nel secondo file ho 2 colonne: La prima contenente numeri identificativi corrispondenti a quelli del primo file, la seconda un punteggio. Come posso fare per ottenere un file di risultato contenete gli url con affianco il corrispondente punteggio?

andbin
26-08-2008, 10:01
Salve a tutti, vorrei chiedervi aiuto per risolvere questo problema. Ho 2 file di testo. Nel primo ho 2 colonne: la prima contiene numeri identificativi. La seconda contiene url. Anche nel secondo file ho 2 colonne: La prima contenente numeri identificativi corrispondenti a quelli del primo file, la seconda un punteggio. Come posso fare per ottenere un file di risultato contenete gli url con affianco il corrispondente punteggio?Puoi iniziare con il leggere il secondo file, quello che contiene la associazione ID/punteggio. Carichi tutto in memoria, in una "map" (HashMap ad esempio) in modo che l'ID sia la chiave e il punteggio il valore.

Poi leggi il primo file, per ogni riga estrai ID e URL. Vai a cercare l'ID nella map per avere il punteggio, quindi scrivi (su un altro file) l'URL e il punteggio.

Questo a grandi linee. Poi per la lettura e la estrazione dei valori, chiaramente bisogna vedere meglio come sono fatti i file: le due colonne sono separate da un separatore?? O la prima colonna ha lunghezza fissa?? In quale charset sono scritti?

Per leggere "a righe" puoi usare BufferedReader, poi usi un qualche split o substring o regex (in base al formato) per estrarre i campi. Un valore numerico lo converti dalla stringa del campo con parseInt() di Integer. Anzi .. visto che l'ID lo devi avere come oggetto per poterlo mettere nella map, conviene usare valueOf().

banryu79
26-08-2008, 10:10
Così su due piedi:
carichi le coppie ID - Url e ID - Punteggi in due HashMap.
Quindi usi i due HahMap sfruttando gli ID comuni per generare il nuovo file che conterrà gli Url e i punteggi.

Oppure metti in un HashMap solo le coppie ID-URL contenute nel primo file e praserizzi il secondo: per ogni ID associato a un Punteggio incontrato vai a recuperare nell'HashMap l'URL che ha come chiave lo stesso ID e scrivi la coppia URL-Punteggio su un nuovo file (o in una stringa in memoria e poi sostituisci i file o ci fai quel che ti pare)

@EDIT: scusa Andbin, mi sono "sovvraposto" per eccessiva latenza nell'editing del messaggio (sono stato interrotto e poi ho postato)

DonDepo
26-08-2008, 10:22
Poi per la lettura e la estrazione dei valori, chiaramente bisogna vedere meglio come sono fatti i file: le due colonne sono separate da un separatore?? O la prima colonna ha lunghezza fissa?? In quale charset sono scritti?


Guarda il file ID_Punteggio è cosi:

5 216.3400000000000034106051316
48 215.2700000000000102318153949
3 210.6800000000000068212102633
...
il file ID_URL è così:

NodeId Module
1 http://www.dmoz.org/Arts/Literature/Myths_and_Folktales/
2 http://blog.dmoz.org/
3 http://search.dmoz.org/cgi-bin/search
...

poi usi un qualche split o substring o regex


Onestamente non so di cosa stai parlando. Cosa intendi?

banryu79
26-08-2008, 11:15
Sembra che tra l'ID e il Punteggio o l'URL il delimitatore sia un semplice carattere di spazio.

In questo caso potresti usare in modo semplice la classe Scanner (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html)
Prova a darci un'occhiata.

DonDepo
27-08-2008, 07:56
Allora seguendo i vostri consigli uso la classe Scanner per acquisire ID e Punteggio dal file. Dopo di che cerco di inserire con "put" questi dati nell'HashMap ma non li inserisce!!!!!! Ho provato a fare questo:

HashMap hm = new HashMap();
File f = new File("IDPunteggio.txt");
Scanner s = new Scanner(f);
String key = s.next();
String punt = s.next();
System.out.println(hm.get(1));

Ho controllato ed effettivamente s.next() acquisisce i dati dal file. In cosa sbaglio?

Edit: niente ho risolto :)