Search code examples
phpstringforeachcycle

php foreach cycle with counter to prevent echo of first and last lines


I'm trying to make a little script to manipulate a txt file with a given directory file contents. What happens is that the text file generated by going to Win command line and execute "dir > file.txt" has lines that are junk to this purpous... like the first 7 lines and last 3. These ones:

O volume na unidade C nao tem nome.
O numero de serie do volume - F879-0704

Directorio de C:\xampp\htdocs\projectX\images\

06-01-2012  14:56    <DIR>          .
06-01-2012  14:56    <DIR>          ..
.
.
.
140 ficheiro(s)        5.676.057 bytes
2 dir(s)        307.888.893.952 bytes livres

The code I have so far is this:

$file = $_GET['file'];
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);

$end = 0;
$i = 0;

while($end != 1) {

$output = str_replace("\t|\t", " | ", $data);
$output = explode("\n", $output);

foreach($output as $var) {
    if($i > 7){
      $newstring = substr($var, 36);
      echo "File: " . $newstring . "<br />"; 
    }
    $i++;
}       
echo "<br /><strong>End of file list!</strong>";
$end = 1;

}

My Question: How can I get this foreach cycle to ignore the last lines of the text file too ?


Solution

  • You should probably use scandir() or equivalent PHP functions that are specifically made for this.

    If you insist, however, you can either slice up the array using array_slice(). The following will remove the two first and last lines.

    $output = array_slice($output, 2, count($output) - 4);
    

    Alternatively, you could just iterate over the part you want with a for loop instead of a foreach loop.

    $files = (count($output)-2);
    for ($file=7; $file < $files; $file++)
      $newstring = substr($output[$file, 36);
      echo "File: " . $newstring . "<br />"; 
    }