Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    come cancellare e riposizzionare le linee di un file csv?

    ciao .

    possiedo un form di cancellazione.
    questo form invia la richiesta ad una pagina che cancella dal database il record e dal file cancella la riga.

    il problema è proprio dal file !

    vi chiedo consiglio su come cancellare il file .
    la mia procedurà è la seguente :

    1- carico i valori del form in un array.
    2- nel promo campo dell'array ho il valore univoco che mi permette di riconoscere il record/riga
    3- apro il file ---> $apro = fopen ($nomefile , $metodo_di_lettura)
    4- leggo il file con ---> fread ($apro)
    5- confronto il mio array con i valori di ogni riga tramite un ciclo for
    6-Il mio problema
    quando trovo la riga come faccio a cancellarla??
    eventualemte si può , una volta cancellata la riga, ricompattare le linee nel csv?



    tipo: file csv intero

    1;pippo;foglio;end
    2;marco;penna;start
    3;maria;telefono;end

    valore nell'array
    2 , marco , penna , start

    foglio linea cancellata

    1;pippo;foglio;end

    3;maria;telefono;end

    foglio riformattato

    1;pippo;foglio;end
    3;maria;telefono;end


    Grazie del'aiuto

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    IO ti consiglio di fare cosi '

    Usa la funzione file() per leggere il contenuto del file.

    Avrai gia' l'array co tutte le righe.

    Poi esegui la tua procedura di controllo e la cella da eliminare la setti a stringa vuota.

    esegui una
    $str = implode("\r\n" , $fileRows) ;

    ora sovrascrivi il file con una fwrite() la stringa ottenuta con implode

    Et voila'.

  3. #3
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    ciao ,
    io ho fatto una cosa del genere, ma il mio problema è il controllo... non so quale funzione utilizzare.

    io nell'array dove contengo i valori per effettuare il controllo è questo
    $array_controllo = (1=> $valore1 , 2=>$valore2);
    allora:
    Codice PHP:
    $file "";//path del mio file
    $leggo_righe file ($file);
    $elements count($leggo_righe );
    for(
    $i $i$count $i++){
    $esplosione explode (";" $leggo_righe[$i]);
    $array_esploso arraay($esplosione);
    if ((
    $esplosione[0] == $array_controllo[1]) && ($esplosione[1] == $array_controllo[2])){
    $array_esplosione ="";
    }
    $implodo implode ("\r\n" $array_esplosione);
    }
    //qui dovrei mettere il fwrite , ma ora faccio una stampa per vedere se funziona ... ma nulla 
    dove sbaglio ?
    non dirmi tutto
    grazie...

  4. #4
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    up

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    risolto :
    era come dicevi tu fin dall'inizio, sono io che non ho pensato a dovere

    Codice PHP:
    $file "";//path del mio file
    $leggo_righe file ($file);
    $elements count($leggo_righe );
    for(
    $i $i$count $i++){
    $esplosione explode (";" $leggo_righe[$i]);
    $array_esploso arraay($esplosione);
    if ((
    $esplosione[0] == $array_controllo[1]) && ($esplosione[1] == $array_controllo[2])){
    $str ="";
    }else{
    $str impode (";" $esplosione);
    }
    $leggo_righe[$i] = $str;
    }
    $aprofile =fopen($file "w");
    foreach (
    $leggo_file as $scrivo){
    $scrivo fwrite ($aprofile $scrivo);

    scrittura perfetta... l'unica cosa è il \r\n che non serve, riscrivendo un nuovo array sul vecchio file non bisogna mettere gli spazi . grazie ancora

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    aspetta c'e' qlkosa che nn va ....

    Codice PHP:

    // GLi array e' meglio farli cosi' 
    $array_controllo = array( 1=>"val 1" 2=>"val 2" ) ;

    $file "";//path del mio file
    $leggo_righe file ($file);

    $elements count($leggo_righe );
    // $count che e'???
    //for($i = 0 ; $i< $count ; $i++){
    // Vorrai dire :
    for($i $i$elements $i++){
       
    $esplosione explode (";" $leggo_righe[$i]);
       
    // A CHE SERVE??????? $esplosione e' gia' un array
       // $array_esploso = arraay($esplosione);

       
    if (($esplosione[0] == $array_controllo[1]) && ($esplosione[1] == $array_controllo[2])){
          
    $str ="";
       }else{
          
    $str impode (";" $esplosione);
       }
       
    $leggo_righe[$i] = $str;
    }

       
    // ATTENTO : che cosi' nn metti i \n
       //$aprofile =fopen($file , "w");
       //foreach ($leggo_file as $scrivo){
       //$scrivo = fwrite ($aprofile , $scrivo);

       
    $newData implode("\n" $leggo_righe) ;
       
    $fp fopen($file "w");
       if( 
    fwrite($fp $newData strlen($newData) ) )
       {echo 
    "FILE AGGIORNATO" ;}
       else
       {echo 
    "ERRORE AGGIORNAMENTO" ;}
       
    // RICORDA di chiudere sempre i files/dir aperte non tutti i filesystem sono permissivi a riguardo
       
    fclose($fp) ; 

  7. #7
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    hummm... ok
    file chiuso ...
    per le altre parti si ...

    $count è stata una svista...

    $esplosione = explode (";" , $leggo_righe[$i]);

    $esplosione tiene tutti i dati in un array

    [0] 1 marco luigi pippo
    [1] 2 luisa maria marta

    però cosi facendo
    Codice PHP:
    $esplosione explode (";" $leggo_righe[$i]);
       
    // $array_esploso = arraay($esplosione); 
    me li inserisce in questo modo
    [0] 1
    [1] marco
    [2] luigi
    .... e cosi via,

    facendolo ciclare mi prende un indice alla volta di $esploso
    quindi posso dargli gli indici giusti(conoscendo la loro posizione)
    Codice PHP:
    if (($esplosione[0] == $array_controllo[1]) && ($esplosione[1] == $array_controllo[2])){ 
    // ATTENTO : che cosi' nn metti i \n
    $newData = implode("\n" , $leggo_righe) ;
    mettendo \n non mi mette il separatore ; tra un campo e l'altro, ma lascia uno spazio...
    con \n : 1 marco luigi pippo
    con ; : 1;marco;luigi;pippo

    poi inserendoli nuovamente in un array mi esce fuori questa cosa:

    [0]1;marco;luigi;pippo
    [1]2;luisa;maria;marta

    andando a riscrivere il file ... ossia sovrascrivendolo lui mi mette un indice dopo l'altro andando a capo.

    Ho fatto un paio di prove e sembra funzionare.... ma se mi dici che cosi potrebbe creare dei problemi verifico nuovamnete meglio.

    utilizzando il debugho visto la struttura degli array!

    Però non essendo esperto non vorrei che si piantasse di punto in bianco!

    Ti ringrazio delle risposte..
    caio

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Originariamente inviato da tapu

    $esplosione = explode (";" , $leggo_righe[$i]);

    $esplosione tiene tutti i dati in un array

    [0] 1 marco luigi pippo
    [1] 2 luisa maria marta

    però cosi facendo
    Codice PHP:
    $esplosione explode (";" $leggo_righe[$i]);
       
    // $array_esploso = arraay($esplosione); 
    me li inserisce in questo modo
    [0] 1
    [1] marco
    [2] luigi
    .... e cosi via,
    Si e' giusto, $leggo_righe[$i] e' gia' la riga i-esima del tuo file.
    $esplosione invece e' l'array delle sottostringhe di tale riga e contiene tutte le sottostrighe di $leggo_righe[$i] inserite cella per cella in un array.

    giusto per farti capire

    $esplosione = explode (...) => GENERA :

    array {
    [0] => [prima sottostringa]
    [1] => [seconda sottostringa]
    ....
    }

    se poi fai
    $array_esploso = array($esplosione); => GENERA

    array{
    [0]=> array{
    [0] => [prima sottostringa]
    [1] => [seconda sottostringa]
    ....
    }
    }
    come vedi nn serve a molto.

    Originariamente inviato da tapu
    facendolo ciclare mi prende un indice alla volta di $esploso
    quindi posso dargli gli indici giusti(conoscendo la loro posizione)
    Codice PHP:
    if (($esplosione[0] == $array_controllo[1]) && ($esplosione[1] == $array_controllo[2])){ 
    // ATTENTO : che cosi' nn metti i \n
    $newData = implode("\n" , $leggo_righe) ;
    mettendo \n non mi mette il separatore ; tra un campo e l'altro, ma lascia uno spazio...
    con \n : 1 marco luigi pippo
    con ; : 1;marco;luigi;pippo

    poi inserendoli nuovamente in un array mi esce fuori questa cosa:

    [0]1;marco;luigi;pippo
    [1]2;luisa;maria;marta

    andando a riscrivere il file ... ossia sovrascrivendolo lui mi mette un indice dopo l'altro andando a capo.

    Ho fatto un paio di prove e sembra funzionare.... ma se mi dici che cosi potrebbe creare dei problemi verifico nuovamnete meglio.

    utilizzando il debugho visto la struttura degli array!

    Però non essendo esperto non vorrei che si piantasse di punto in bianco!

    Ti ringrazio delle risposte..
    caio
    Si comporta correttamente fondendo le sottostringhe e rimettendo il caratter di sperazione .
    Le funzioni explode e implode servono a spezzare una stringa rispetto ad una data sottostringa.
    Fondere un array in una stringa separando i campi con una determinata sottostringa.

    EDIT :
    $newData = implode("\n" , $leggo_righe) ;
    questo serve a ripristinare l'array in una unica stringa che verra' scritta sul file.
    \n e' unn carattere di escpaing che serve a mandare accaporiga la stringa.
    Quindi "implodendo" l'array modificato andiamo a ripristinare il contenuto originale del file inserendo correttamente i caratteri di escaping.

    Se hai degli spazi nei valori usa la funzione trim($str) per toglierli

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.