Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di omaggi
    Registrato dal
    Sep 2009
    Messaggi
    25

    [JAVA] Lettura riga per riga da file e string split

    Ciao a tutti.
    Per lavoro devo integrare in una banca dati MySQL un file txt. Questo file txt ha un formato particolare e i vari campi sono suddivisi da un "punto e virgola".
    Ho provato con varie classi di Java (Scanner, String.Split, StringTokenizer) ma non riesco troppo ad andare in avanti.
    Il prolema principale é che ogni riga comincia con la data e poi é seguita da certi identificativi. Dopodiché ho 96 dati. Questi dati dovrei riuscire a dividervi e poi poterli associare ad una data creata automaticamente partendo dalla prima e aggiungendo ogni volta 15 min.

    Vi faccio vedere il file, perché sennò non si capisce...

    01.01.08;00:15:00;CH10019012345KLUCTLUCT00AECA1;1-1:1.29.0*255;219.250000;214.250000;214.000000;...

    Dovrebbe diventare così:

    01.01.08 00:15 CH10019012345KLUCTLUCT00AECA1 1-1:1.29.0*255 219.250000
    01.01.08 00:30 CH10019012345KLUCTLUCT00AECA1 1-1:1.29.0*255 214.25000

    Qualcuno a qualche idea?

    In sostanza questa file java mi serve per convertire questo txt in un file sql da poi importare in MySQL...

    Grazie mille.

    PS: scusate se non sono forse stato troppo chiaro, ma non é evidente spiegare questo tipo di file...

  2. #2
    Ciao, allora ci sono diversi metodi.
    Io non conosco quale è il tuo problema con lo string split.
    Comunque ti metto un metodo che usa questa funzione ed un altro metodo che io ho battezzato come "bulk" in quanto parsa tutto anche le "forme di pane" quando sono verificate certe condizioni (come nel tuo caso).

    Partiamo dal metodo 1.

    import java.io.*

    // Tralasciando i controlli circa l'esistenza del file ovvero un controllo del tipo:
    // if ((new File(nomeFile)).exists()) ecc.
    // Creiamo un'istanza dell'ogggetto File
    File fileDaLeggere = new File(nomefile);

    // Poi allochiamo un BufferedReader, usando anche la classe FileReader in questo modo:
    BufferedReader reader = new BufferedReader(new FileReader(fileDaLeggere));

    // Leggiamo in una variabile String il contenuto di ciascuna riga del file:
    String rigaCorrente = reader.readLine();
    while (rigaCorrente != null) { // se è null siamo a fine stream

    String[] campiDellaStriga = rigaCorrente.split(";"); // Splittiamo gli elementi usando come separatore il ;
    // Partendo dall'indice 0 fino al (size() - 1) della variabile campiDellaStriga abbiamo i diversi campi e se tutto è andato bene il size() dovrebbe essere 96
    // . . . . .
    // altre operazioni
    rigaCorrente = reader.readLine();
    }

    Il problema sorge (la mia è una supposizione in quanto non so di preciso quale sia il tuo problema) se il file di testo proviene da Unix/Linux/Mac ed è usato sotto Windows, o viceversa, per una questione legata alla gestione dei LF = Line Feed (avanzamento linea), dei CR = Carriage Return (Ritorno carrello - invii) ed eventuasli altri caratteri speciali che sono gestiti diversamente fra questi sistemi.

    In effetti lo split fallisce se, il metodo readline() della classe BufferedReader interpreta male il fine riga a causa di questi caratteri.

    Per farti comprendere meglio ti allego questo stralcio di testo tratto da un articolo in inglese:

    "Different operating system may use different characters to indicate the line break. Unix/Linux uses a single Line Feed (LF) character as line break. Windows/DOS uses 2 characters: Carriage Return/Line Feed (CR/LF). MacOS uses CR."

    Se vuoi approfondire il link e':

    http://linuxcommando.blogspot.com/20...ge-return.html

    può essere utile in quanto fornisce qualche consiglio e alcuni tool per rimuovere questi "problemi di formato".

    Comuqnue tornando a noi, se è questo il tuo caso e non puoi/vuoi usare sistemi per pulire il tuo file in input devi passare al metodo "bulk" di cui ti parlavo prima.
    Ma ti avviso, rispetto al primo, per quantita' di codice da scrivere e' un bagno di sangue anche se il risultato e' garantito a prescindere da qualsiasi sistema.
    Facciamo così se proprio ti occorre perdo tempo a postartelo :-)

  3. #3
    Utente di HTML.it L'avatar di omaggi
    Registrato dal
    Sep 2009
    Messaggi
    25
    @Voxel

    Grazie mille dell'aiuto. Ci provo con le info che mi hai dato tu.

    Thx e buona giornata, Omar!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.