Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476

    [PHP] Microchirurgia sui file di testo

    Ciao raga,

    come da topic

    io ho un file di testo, cosi combinato:

    codice:
    Agro=213&Calz=887&Carto=672
    Vorrei aggiornare il valore di una singola voce; ad esempio Carto=672 si aggiorni tramire script a Carto=673

    Non posso rigeneare tutto il file (purtroppo) e non posso nemmeno fare il replace perché il valore 672 non lo conosco a priori, ma lo devo sempre leggere.

    Si può fare?


    Ciao

    dies

  2. #2
    Non è molto chiaro, comunque...
    codice:
    //Agro=213&Calz=887&Carto=672 (da 672 a 692)
    $aggiorna = 672;
    for ($i=672; $i<692; $i++){
    echo ''.$aggiorna.'
    ';
    $aggiorna++;
    }
    potrebbe esserti utilie!?

  3. #3
    Ciao,
    una volta letto il file potresti usare le regular expression per sostituire il valore che ti serve in questo modo:

    $nuovoContenuto = preg_replace('/Carto=(\d+)/', 'Carto=456', $vecchioContenuto);

    I numero 456 è il valore nuovo da inserire che potrebbe essere sostituito con una variabile. Non mi è molto chiaro cosa intenda per rigenerare perchè se devi cambiare il contenuto deò file sei costretto a riscriverlo (non penso ci siano alternative): puoi appendere dati ma cmq il file andrà riscritto su disco.
    http://www.beavermag.it

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    [supersaibal]Originariamente inviato da biamat
    Ciao,
    una volta letto il file potresti usare le regular expression per sostituire il valore che ti serve in questo modo:

    $nuovoContenuto = preg_replace('/Carto=(\d+)/', 'Carto=456', $vecchioContenuto);

    I numero 456 è il valore nuovo da inserire che potrebbe essere sostituito con una variabile. Non mi è molto chiaro cosa intenda per rigenerare perchè se devi cambiare il contenuto deò file sei costretto a riscriverlo (non penso ci siano alternative): puoi appendere dati ma cmq il file andrà riscritto su disco. [/supersaibal]
    Ciao e grazie a tutti e due per la collaborazione.

    Credo che il tuo esempio biamat faccia al mio caso; devo provare. Ti chiedo una cortesia, mi traduci letteralmente questa parte della preg_replace('/Carto=(\d+)/'

    Effettivamente, una volta che ho cambiato il contenuto del file di testo, dovrò riscriverlo.

    Ciao

    dies

  5. #5
    Ciao,
    allora la regular expression cerca la scritta "Carto=" dopo di che cerca una serie di numeri (\d indica un carattere di tipo numerico e il "+" che ce ne sia almeno 1).
    La procedura completa potrebbe essere la seguente allora:

    $fileName = "prova.txt";
    $handle = fopen($fileName, "r");
    $vecchioContenuto = fread($handle, filesize($fileName));
    fclose($handle);
    $numero = 456;
    $nuovoContenuto = preg_replace('/Carto=\d+/', 'Carto='.$numero, $vecchioContenuto);
    $handle = fopen($fileName, "w");
    fwrite($handle, $nuovoContenuto);
    fclose($handle);
    http://www.beavermag.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    [supersaibal]Originariamente inviato da biamat
    Ciao,
    allora la regular expression cerca la scritta "Carto=" dopo di che cerca una serie di numeri (\d indica un carattere di tipo numerico e il "+" che ce ne sia almeno 1).
    La procedura completa potrebbe essere la seguente allora:

    $fileName = "prova.txt";
    $handle = fopen($fileName, "r");
    $vecchioContenuto = fread($handle, filesize($fileName));
    fclose($handle);
    $numero = 456;
    $nuovoContenuto = preg_replace('/Carto=\d+/', 'Carto='.$numero, $vecchioContenuto);
    $handle = fopen($fileName, "w");
    fwrite($handle, $nuovoContenuto);
    fclose($handle); [/supersaibal]
    Ok, mi mettto subito al lavoro.

    Grazie


    dies

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    Lo script funziona "più che" alla perfezione. Grazie.

    Volevo chiedere se con il PHP è possibile incrementare di uno (1) quel valore \d+/; senza passare per la variabile $numero.

    codice:
    $nuovoContenuto = preg_replace('/Carto=\d+/', 'Carto='.$numero, $vecchioContenuto);

    Ciao e grazie per la preziosa collaborazione.


    dies

  8. #8
    usi la funzione file() per metter il file in un arry (1 riga sola --> 1 solo elemento)

    poi con explode(file, '&') separi le variabili
    con un altro explode separi il nome dal valore che ti interessa (usando "=" come carattere seèparatore)
    a questo punto modifichi il valore incrementandolo, e poi ri-implodi tutto

  9. #9
    Ciao,
    per aggiungere in automatico uno al valore basta che crei una piccola funzione (non sono riuscito a farlo direttamente nell regExp) e modifiche l'espressione regolare così:



    codice:
    function aggiungiUno($numero){
    	$numero = $numero*1+1;
    	return $numero;
    }
    $nuovoContenuto = preg_replace('/Carto=(\d+)/e', "'Carto='.aggiungiUno('\\1')", $vecchioContenuto);
    http://www.beavermag.it

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    Ciao,
    la e in
    codice:
    '/Carto=(\d+)/e'
    cosa significa?

    Volevo chiederti, e scusami se insisto (magari la colpa è mia perché non ho capito il funzionamento), è possibile assegnare alla variabile $numero il vecchio valore di Carto=(\d+)?

    Perché io devo aggioranre di uno (1) il vecchio valore di Carto, valore che non conosco a priori.

    Grazie per l'attenzione.

    dies

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.