Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Doug2531

Problema para ler as primeiras linhas de um .txt

Recommended Posts

Bom dia.

Estou com um problema que não consigo resolver desde sexta. Preciso abrir um arquivo .txt, ler linha por linha deste arquivo (que são nomes de arquivos que se encontram em uma outra pasta) e comparar cada linha deste .txt com as centenas de arquivos que se encontram em outra pasta. Quando encontrar os arquivos citados no .txt dentro da pasta, preciso copiar eles para uma outra pasta.

 

Bem, já fiz o código todo, mas o problema, é que o PHP sempre pega só o arquivo da última linha, ignorando as de cima. Explicando melhor, mesmo que os arquivos citados no .txt estejam dentro da pasta, ele não entra dentro do if e passa direto, somente quando chega na última linha que o if aceita a condição e copia o arquivo.

 

Quando eu substituo a leitura do .txt por um array com o nome de cada arquivo, ele lê todos eles normalmente.

 

 

Por exemplo, eis o meu código:

<?php

ini_set("auto_detect_line_endings", true);

class Teste3 {

    

    function leArquivoTxt($caminho){

        $myfile = fopen($caminho, "r") or die("Unable to open file!");

        while(!feof($myfile)) {

          $line[] = fgets($myfile);

        }

        fclose($myfile);

        return $line;

    }

    

    function leArquivosHtml($caminhoHtml){

        $di = new RecursiveDirectoryIterator($caminhoHtml);

        foreach (new RecursiveIteratorIterator($di) as $filename => $file) {

            $arrayTemp[] = pathinfo($filename, PATHINFO_FILENAME);

        }

        return $arrayTemp;

    }

}

$count = 0;

$classTeste3 = new Teste3();

$txt = $classTeste3->leArquivoTxt("C:\Users\Admin\Desktop\Nova pasta (4)\Novo Documento de Texto (2).txt");

$html = $classTeste3->leArquivosHtml("C:/Access/04-DESCOMPACTADOS/2015/OF000005/SEG.NOTCRIME.DE20141208.ATE20141214.D20141215.H021635/cont");



for($i = 0; $i < count($txt); $i++){

    if(in_array($txt[$i], $html )) {

        $count++;

        echo $txt[$i]. "<br>";

    }

}



echo "Quantidade de vezes que entrou no if: " . $count;

Nesse caso de cima, neste último echo, o php imprime "Quantidade de vezes que entrou no if: 1", não importando quantas linhas existam no arquivo.

 

Agora, se eu fizer assim:

<?php

ini_set("auto_detect_line_endings", true);

class Teste3 {

    

//    function leArquivoTxt($caminho){

//        $myfile = fopen($caminho, "r") or die("Unable to open file!");

//        while(!feof($myfile)) {

//          $line[] = fgets($myfile);

//        }

//        fclose($myfile);

//        return $line;

//    }

    

    function leArquivosHtml($caminhoHtml){

        $di = new RecursiveDirectoryIterator($caminhoHtml);

        foreach (new RecursiveIteratorIterator($di) as $filename => $file) {

            $arrayTemp[] = pathinfo($filename, PATHINFO_FILENAME);

        }

        return $arrayTemp;

    }

}

$count = 0;

$classTeste3 = new Teste3();

//$txt = $classTeste3->leArquivoTxt("C:\Users\Admin\Desktop\Nova pasta (4)\Novo Documento de Texto (2).txt");

$html = $classTeste3->leArquivosHtml("C:/Access/04-DESCOMPACTADOS/2015/OF000005/SEG.NOTCRIME.DE20141208.ATE20141214.D20141215.H021635/cont");



$arrayTemp = array("104_0014.0000000211883.2014-11-21.1", "104_0095.0000000795658.2014-12-08.1",

        "104_1191.0000000227499.2014-11-21.1", "104_0667.0000000034432.2014-11-03.1", "104_0636.0000000388238.2014-12-08.1");



for($i = 0; $i < count($arrayTemp); $i++){

    if(in_array($arrayTemp[$i], $html )) {

        $count++;

        echo $arrayTemp[$i]. "<br>";

    }

}



echo "Quantidade de vezes que entrou no if: " . $count;

 

Colocando o nome dos arquivos direto no PHP dentro de um array, ele imprime: "Quantidade de vezes que entrou no if: 5", sendo que os arquivos presentes neste array são os mesmos presentes no .txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.