Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    lettura file txt e regular expression

    Salve,
    dovrei fare un find-replace di numeri aumentati di 19.

    come faccio a far leggere al php un txt?

    il find dovrebbe essere tutti i numeri da uno a tre cifre, e lo faccio con \d{1,3}, il replace con il calcolo glie lo faccio fare al php,

    ma mi manca la parte openfile da scriptare...
    わさび

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    se non hai problemi di memoria (cioè il file è piccolo), potresti partire da questo:

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace('/([0-9]{1,3})/', '$1'+19, $file);
    non so' se funziona ma è un buon inizio

  3. #3
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [supersaibal]Originariamente inviato da kuarl
    se non hai problemi di memoria (cioè il file è piccolo), potresti partire da questo:

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace('/([0-9]{1,3})/', '$1'+19, $file);
    non so' se funziona ma è un buon inizio [/supersaibal]
    Quasi quasi funziona...
    ...ma mi converte tutti i numeri in 19 =_='
    in pratica non fa la somma

    ho provato a mettere anche al posto di $1, \\1 ma con lo stesso risultato
    わさび

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    [supersaibal]Originariamente inviato da Trinità76
    Quasi quasi funziona...
    ...ma mi converte tutti i numeri in 19 =_='
    in pratica non fa la somma

    ho provato a mettere anche al posto di $1, \\1 ma con lo stesso risultato [/supersaibal]
    uhmm...

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace('/([0-9]{1,3})/', (int)('$1')+19, $file);

  5. #5
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [supersaibal]Originariamente inviato da kuarl
    uhmm...

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace('/([0-9]{1,3})/', (int)('$1')+19, $file);
    [/supersaibal]
    Stesso identico risultato

    Io credo che il preg_replace non prenda altre istruzioni all'interno come appunto quella della somma (mi è già capitato lo stesso genere di problema).
    Bisognerebbe spezzarlo in più istruzioni...
    ...l'unico problema è che se dopo aver fatto il replace gli dico print $file me ne stampa al video solo una parte...

    Questo è il codice:

    Codice PHP:
    <?php
    $filename 
    "nomefile.txt";

    $fp fopen($filename"r");
    $file fread($fpfilesize($filename));
    fclose($fp);

        
    //    if (eregi("/([0-9]{1,3})/", $file)) {
                
    eregi("/(.*)([0-9]{1,3})(.*)/"$file$regs);
                
    $file $regs[1].($regs[2]+19).$regs[3];
                print 
    $file;
        
    //    }
    ?>
    わさび

  6. #6
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    come faccio a fare un while per ogni riga che trova nel $file?

    in questo modo, potrei leggere dal txt e crearne uno nuovo in cui scrivere i numeri cambiati...
    わさび

  7. #7
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    nessuno sa come fare un while per ogni riga (newline) del txt?
    わさび

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    non è molto pratico fare come dici... prova con:

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace_callback('/([0-9]{1,3})/', create_function( 
       '$matches',
       'return $matches[1] + 19;'
    ), $file);

  9. #9
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [supersaibal]Originariamente inviato da kuarl
    non è molto pratico fare come dici... prova con:

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print preg_replace_callback('/([0-9]{1,3})/', create_function( 
       '$matches',
       'return $matches[1] + 19;'
    ), $file);
    [/supersaibal]
    Ti ringrazio intanto per la tua disponibilità nell'aiutarmi
    La mia difficoltà ad usare una sintassi del genere sta nel fatto che non ho un unico preg replace da effettuare:

    in pratica io ho tante righe fatte così
    testo testo testo ->TAB-> 10\n
    testo testo ->TAB-> 110, 12\n
    testo testo testo testo ->TAB-> 5, 45, 443\n
    ecco perchè volevo servirmi del while

    con la tua sintassi usando il preg replace direttamente nel print mi viene fuori in output tutto il testo di fila senza interruzione di riga...
    わさび

  10. #10
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    [supersaibal]Originariamente inviato da Trinità76
    Ti ringrazio intanto per la tua disponibilità nell'aiutarmi
    La mia difficoltà ad usare una sintassi del genere sta nel fatto che non ho un unico preg replace da effettuare:

    in pratica io ho tante righe fatte così


    ecco perchè volevo servirmi del while

    con la tua sintassi usando il preg replace direttamente nel print mi viene fuori in output tutto il testo di fila senza interruzione di riga... [/supersaibal]
    funziona?

    cmq le interruzzioni di riga il replace non le tocca...

    prova a stampare così:

    codice:
    $fp = fopen("tuofile.txt", "r");
    $file = fread($fp, filesize("tuofile.txt"));
    fclose($fp);
    
    print nl2br( preg_replace_callback('/([0-9]{1,3})/', create_function( 
       '$matches',
       'return $matches[1] + 19;'
    ), $file) );

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.