Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543

    Leggere un file txt e inserire dei valori in un DB?

    Buongiorno,
    mi trovo a dover trasferire dei dati da un grosso file txt a un db MySql.
    Il problema è che questo file si compone di molti dati per ogni riga suddivisi da uno spazio o da un Tab.
    Pensavo di usare un explode del tipo explode(" ", $arrayRiga). Però, come dicevo, in ogni riga ci sono a volte dei tab e a volte degli spazi.
    Come gestisco questa cosa?
    E poi, c'è da dire che vorrei inserire solo alcune parti di una riga, ad esempio:
    Codice PHP:
    $arrayRiga "parola1 parola2 parola3        parola4 parola5" // lo spazio più grosso è un tab 
    vorrei inserire presempio tutte le parole presenti dopo il primo spazio, dopo il 4°, ecc, o dopo il primo Tab, ecc..
    Come faccio?

    Grazie per il vostro aiuto.
    "To iterate is human, to recurse, divine." (R.(Heller))

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    E' necessario che ci siano i tab nel file? In caso contrario potresti prima sostituire i tab con uno spazio (ovviamente usando uno script se i tab sono troppi per farlo a mano), così potrai usare l'esplode senza problemi.

  3. #3
    ho lo stesso problema sto facendo progressi con explode ma mi sono puntato su una cavolata

  4. #4
    l' explode si può fare anche coi tab

    $array = explode("|",$parola4);

    $n = $array[0];
    $x = $array[1];

  5. #5
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    @ Alhazred: il problema è che questo file contiene decine di migliaia di righe. Perciò non posso sapere quanti tab ci sono in ogni riga.
    Vorrei realizzare qualcosa del tipo "quando trovi dei tab o degli spazio, salta subito alla parola successiva".

    @ Latino Romano: si questo mi è utile, ma si può usare "|" e " " insieme in un explode?
    "To iterate is human, to recurse, divine." (R.(Heller))

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Questo piccolo script ti prende il file e sostituisce tutti i tab con uno spazio.
    Codice PHP:
    $file "file.txt";
    $handle fopen($file"r");
    while(!
    feof($handle)) {
        
    $testo .= fgets($handle);
    }    
    $testo str_replace("\t"," ",$testo);
    fclose($handle);
    $handle fopen($file"w");
    fwrite($handle$testo);
    fclose($handle); 
    Attento che sovrascrive il file che hai, se serve fatti una copia del file originale, o fa creare allo script un nuovo file.

    Il file che genera lo script avrà solo spazi e non tabulazioni, quindi potrai usare semplicemente explode(" ",....) non ti servirà di fare distinzioni tra spazi e tab.

  7. #7
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Ciao Alhazred e grazie per la tua risposta.
    Una piccola delucidazione: come faccio, come ho detto nel primo post, a scegliere solo alcune parole all'interno di una riga?
    Ad esempio se mi servono solo la prima parola (e fin qui ci siamo), poi la terza, poi la 6 e la 7, eccc...come faccio?
    "To iterate is human, to recurse, divine." (R.(Heller))

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Leggendo il file riga per riga con fgets() potresti fare così:
    Codice PHP:
    $file "file.txt";
    $handle fopen($file"r");
    while(!
    feof($handle)) {
        
    $testo fgets($handle);
        
    $riga explode(" ",$testo);
        echo 
    "Parola1: " $riga[0] . " - Parola3: " $riga[2] . " - Parola6: " $riga[5] .  - Parola7" . $riga[6] . "
    ";


  9. #9
    Codice PHP:
    $str="1\t2 3 4 5\t6"/*equivale a: 1     2 3 4 5    6*/
    $campi preg_split('/\s+/'$str); /*Divide gli elementi separati da uno o più spazi o tab */
    echo $campi[0]; /*Stampa il primo elemento, ovvero 1*/
    echo $campi[3]; /*Stampa il terzo elemento, ovvero 3*/ 
    ciao, bio.

  10. #10
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    @Alhazred: in effetti bastava giocare con gli indici degli array...

    @ bionicoz: non ho capito il tuo esempio.
    "To iterate is human, to recurse, divine." (R.(Heller))

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