Newsgroup: it.comp.java
Titolo: Estrapolare dati da un file TXT

Salve a tutti. Ho la necessità di estrapolare dei dati da un file di
testo .txt e salvarli successivamente in una tabella di SQLServer. Il
file .txt è una specie di template con la struttura:
0409	1549	13453978398
.......	.......	...................
.......	.......	...................
Ove il primo numero rappresenta la data, il secondo l'ora ed il terzo
è un codice. Questo file viene aggiornato continuamente (ha migliaia
di righe..) ed io vorrei trasferire ogni riga del file in un record di
una tabella su SqlServer. C'è un metodo apposito per far ciò? Ma
soprattutto, è possibile fare una cosa del genere?
Se ci fosse un esempio da scaricare o se qcn avesse dle materiale a
riguardo mi piacerebbe dargli un occhiata.
Grazie.
Luigi.


Si e' possibile,
usi java.io.LineNumberReader per leggere il file linea per linea...
java.util.StringTokenizer per parserizzare la linea letta
mentre le jdbc adatte per mettere i dati nel db

...

Non ho capito bene come implementare la tua soluzione. Finora ho fatto
questo per leggere tutte le righe di un file txt:
	BufferedReader MioFile = null;
	MioFile =  new BufferedReader(new FileReader("ScattiShort.txt")); 
	String nextStr; 
	nextStr = MioFile.readLine(); 
	while (nextStr != null){ 
		System.out.println(nextStr);
		nextStr = MioFile.readLine(); 
	}  
	MioFile.close(); 
Adesso vorrei memorizzare parola per parola su una variabile per poi
salvare tutto in un Db.
Mi posteresti un esempio su come utilizzare le functions di cui parli?
In rete non c'è molto e non si capisce bene. Non capisco bene la
sintassi per utilizzarle...
Grazie.

[CUT]
Suppongo che connection sia una connessione al tuo database, TABELLA la
tabella in cui vuoi memorizzare i dati, e le colonne
ORA,DATA, CODICE tutte stringhe (pero' ORA e DATA te le puoi convertire come
vuoi)
Riprendo il tuo codice...
class ... extends Thread // se devi leggere all'infinito il file  devi fate
un while(true) nel run di un thread
{
...
public void run()
{
    try
       {
        String data=null;
        String ora=null;
        String codice=null;
        BufferedReader mioFile = null;
        mioFile =  new BufferedReader(new FileReader("ScattiShort.txt"));
        while (true) // all'infinito, cosi' quando modificano il file riesci
ad accorgertene, tanto ce l'hai aperto
        {
            nextStr = MioFile.readLine();
            if (nextStr!=null)  // readLine() legge null alla fine, se
qualcuno accoda qualcosa, immediatamente la leggi cosi'
                {
                    try{
                    java.util.StringTokenizer stk=new
java.util.StringTokenizer(nextStr); // per default i separatore e' proprio
lo spazio
                    data=stk.nextToken();
                    ora=stk.nextToken();
                    codice=stk.nextToken();
                        try{
                               ps=connection.prepareStatement("INSERT INTO
TABELLA (ORA,DATA, CODICE ) VALUES (?,?,?)");
                               ps.setString(1,ora);
                               ps.setString(2,data);
                               ps.setString(3,codice);
                               ps.executeUpdate();
                              // commit del caso, dipende dal db e
dall'autocommit della connessione
                            }
                            catch (...){// codice da eseguire se scazza
l'inserimento nel db
                                        }
                            finally{...}
                        }
                        catch (...){//codeice da eseguire se hai letto una
riga scritta male
                      }
                }
                else sleep(10);// ad un thread non fa mai male dormire,
anche poco
        }
    }
    catch...
}
...
}
Bye cattiviK

...

Ti ringrazio tanto, sei stato gentilissimo a prestarti così. Grazie
alle tue INFO sono riuscito ad implementare parecchie cosuccie carine.
Ci ho messo un pò di tempo per trovare in rete alcuni tipi di sintassi
"particolari", ma alla fine sembra tutto ok. Un ultima cosa... Ho
scritto:
java.util.Date IsoDate = new java.util.Date();
System.out.println(IsoDate.getDate());
Ma stampa solo il giorno. Perchè? C'è anche un Warning ma non ho
capito perchè.. l'unica cosa che mi è chiara è quella di specificare
la libreria DATE per non creare ambiguità con la stessa di Sql.
Grazie ancora.
Ciao

 capito perchè.. 
Perché getDate() restituisce proprio il giorno del mese. Il warning 
dovrebbe essere dato dal fatto che il metodo è deprecato. Al suo posto 
si deve usare Calendar.get(Calendar.DAY_OF_MONTH). Ad esempio:
Calendar cal = Calendar.getInstance();
cal.setTime(IsoDate);
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
Se vuoi stampare la data puoi fare semplicemente:
System.out.println(IsoDate);
Se poi vuoi stampare la data in un formato particolare puoi usare le 
classe DateFormat e SimpleDateFormat.
Gaetano Bigliardi

 Gaetano Bigliardi
Grazie mille Gaetano. Non sapevo neanche che esistesse una classe del
genere. Ma esiste un sito o un manuale on-line che tu conosca da dove
sia possibile ricavare tutte le classi disponibili con le librerie
java? (.jar)
Grazie.

 java? (.jar)
Qui trovi informazione su _tutte_ le classi del Java 2 SDK:
Java 2 Platform, SE v1.4.1 API documentation
http://java.sun.com/j2se/1.4.1/docs/api/index.html
(Se ti serve la documentazione del J2SDK 1.3 cambia "1.4.1" con "1.3" 
nell'indirizzo).
Gaetano