Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    file di testo: due righe vuote e prime righe

    Devo gestire dei file di testo. In primo luogo ho la necessita' di eliminare le doppie righe vuote e sostituirle con una sola riga... come faccio? Inoltre, mi piacerebbe sapere se e' possibile estrarre solo le prime 3 righe.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    per le prime tre righe
    codice:
    <?php
    $handle = fopen("file.txt", "r");
    $n = 0;
    while (!feof($handle) && $n < 3) {
       $buffer[] = fgets($fd, 4096);
       ++$n;
    }
    fclose($handle);
    ?>
    per eliminare le doppie righe nuove invece devi fare un ciclo
    codice:
    $lines = file("file.txt");
    $new_lines = array();
    foreach($lines as $key=>$line) {
          if(trim($line) == '' && isset($lines[$key+1]) && trim($lines[$key+1]) == '') {
                  continue;
          } else {
                  $new_lines[] = trim($line);
          }
    }
    
    $fd = fopen("file.txt", "w");
    fwrite($fd, implode('\n', $new_lines));
    fclose($fd);
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  3. #3
    Grazie, sembra funzionare. Pero' noto che l'output mi inserisce i caratteri ascii "\n", invece di andare a capo.

    Aggiungo anche una domanda,

    del ciclo:

    Codice PHP:

    $src 
    file_get_contents("file.txt");
    $lines explode("\n",$src);

    for(
    $i=0;$i<count($lines);$i++){
    echo 
    $i.$lines[$i]."
    "
    ;

    Mi stampa una riga in piu' che non riesco a strippare in nessun modo. Alla fine della lista

    uno
    due
    tre

    rimane qualcosa che crea un linea in piu'...

    Io volevo avere in output una cosa tipo:

    [uno] due->
    <-uno [due] tre->
    <-due [tre]

    In pratica quelli nella lista sono nomi di file, io dovrei creare una specie di navigazione avanti e indietro. Ovviamente i file non si chiamano uno due tre Io ho fatto:

    Codice PHP:

    $num 
    count($lines);

    if(
    $i 1){
    $line "<a href=\"index.html\">Indice</a> | ";
    $line.= "<a href=\"".$src[$i+1].".html\">Avanti</a>";

    }elseif(
    $i $num){ #qui ho provato anche con >= =

    $line "<a href=\"".$src[$i-1].".html\">Indietro</a>";
    $line.= " | <a href=\"index.html\">Indice</a>";

    }else{

    $line "<a href=\"".$src[$i-1].".html\">Indietro</a>";
    $line.= " | <a href=\"index.html\">Indice</a> | ";
    $line.= "<a href=\"".$src[$i+1].".html\">Avanti</a>";
    }
    echo 
    $line.$num;

    echo 
    "</p>\n\n<hr/>\n\n"
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  4. #4
    per sistemi unix/linux \n
    per sistemi windows \n\r
    per sistemi mac \r

    quindi devi modificare lo script a seconda del sistema che utilizzi

    utilizzare file_get_contents in combinazione con explode è lo stesso che utilizzare direttamente file(nomefile) stando attenti ad eliminare l'accapo (vedi sopra) o altri simboli con trim quando si utilizza il nome

    per quanto riguarda l'ultima riga, probabilmente dipende proprio da un accapo posto alla fine del file
    ricreandoti l'array in questo modo
    codice:
    $lines = file("file.txt");
    $the_array = array();
    foreach($lines as $val) {
            if(trim($val) != '') {
                  $the_array[] = trim($val);
            }
    }
    non dovresti avere più questi problemi


    per quanto riguarda la navigazione non ho capito bene.
    Forse intendi questo?
    codice:
    $lines = file("file.txt");
    $the_array = array();
    $key = 0;
    foreach($lines as $line) {
           if(trim($line) != '') {
                 $the_array[] = trim($line);
           }
    }
    
    echo (isset($the_array[($i-1)]) ? "<a href=\"".$the_array[($i-1)].".html\">Indietro</a> | " : "").
         "<a href=\"index.html\">Indice</a>".
         (isset($the_array[($i+1)]) ? "<a href=\"".$the_array[($i+1)].".html\"> | Avanti</a>" : "");
    però non so dove prenda $i
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  5. #5
    Sei stato molto gentile e hai anche indovinato. $i viene dal ciclo for di sopra.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

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.