Jump to content


Photo

Buscar Em Diretório De Arquivos Txt


  • Faça o login para participar
1 reply to this topic

#1 GiSP

GiSP

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Feminino

Posted 19/09/2012, 18:35

Oi gente,

Eu vou explicar mais ou menos o que está acontecendo para ver se alguém pode me ajudar nisso pois pesquisei e não encontrei nada a respeito.

Eu fiz um código pra exibir os textos que escrevo com mais algumas amigas, então, a idéia é que cada uma envie seu texto feito no bloco de notas mesmo pra facilitar, aí ele fica disponível nesta página que lista os arquivos e nós podemos ler, trocar idéias pra melhorar, etc.

O código funciona certinho, todo mundo envia os textos que escreve, o código exibe cada texto pelo nome do arquivo como link e para ler, basta clicar no link exibido que abre em uma nova janela, tudo bonitinho.

O problema é que com o passar do tempo, os textos foram se acumulando e tem bastante coisa e na página que exibe, pra facilitar, ela fica paginada de 10 em 10.

Mas como agora tem muita coisa, ficou complicado achar um texto específico, pois temos que ir de página em página procurando e as vezes passa batido algum texto e não encontramos.

Por isso, eu queria tentar fazer uma caixa de busca no script, mas não sei nem por onde começar.

O script funciona assim:

Eu tenho 1 diretório onde estão armazenados todos os textos em formato TXT (bloco de notas).
O código rastreia todo o diretório e exibe cada texto pelo nome como um link, mostrando o nome do texto, a data de envio e um botãozinho do lado para deletar o texto se quiser. Assim basta clicar no link e ler o texto em uma janela pop up.

Como tem muitos textos já, eu queria criar uma caixa de pesquisa que buscasse pelo nome do texto:

Exemplo: O Príncipe das Trevas


Ou pela linha do texto que tem o nome do autor.

Por exemplo, pesquisar no diretório, encontrar e exibir pelo nome do texto e pesquisar pelo nome do autor, só que no caso do nome do autor, teria que pegar pela linha onde fica escrito isto.

Exemplo:

linha1 = Nome do Texto
linha2 = Nome do Autor
linha2 = Data

Aí neste caso, retornaria o resultado e exibiria dentro de uma tabela da seguinte forma:

Nome do Texto - Nome do Autor - Data

Não sei se deu pra entender exatamente a idéia, mas resumindo, seria uma caixa de busca que fizesse o que falei acima.

Se alguém puder me ajudar eu agradeceria muito.

Obrigada

Edição feita por: GiSP, 19/09/2012, 18:36.


#2 pyro3x

pyro3x

    E

  • Usuários
  • 201 posts
  • Sexo:Masculino

Posted 20/09/2012, 23:18

Fiz um exemplo p/ vc.

Tem que aprimorar, não testei ... pode ficar um pouco lento se tiver muitos arquivos..mais de 100 mil por exemplo.

É importante fazer testes antes de executar o foreach para evitar erros também. Não fiz pensando em performance, apenas para solucionar seu problema.

Abraço.

$query = "eduardo"; //procurando por eduardo


$matches = array();

foreach (glob("*.txt") as $filename) {
    //procura no conteudo dos arquivos
    $fp = fopen($filename, "r");
    if ($fp) {
        $line = 1;
        while (!feof($fp)) {
            $line_content = fgets($fp);
            if (preg_match("#" . $query . "#i", $line_content)) {
                array_push($matches, array(
                    $line_content, //trecho com conteudo encontrado
                    $line, //linha que foi encontrado
                    $filename //arquivo que foi encontrado
                ));
            }
            $line++;
        }
        fclose($fp);
    } else {
        echo 'erro ao abrir arquivo : ' . $filename . '<br/>';
    }
    //encontra no nome do arquivo
    if (preg_match("#" . $query . "#i", $filename)) {
        array_push($matches, array(
            $filename
        ));
    }
}

echo 'matches:' . sizeof($matches);
echo '<pre>';
print_r($matches);
echo '</pre>';

Edição feita por: pyro3x, 20/09/2012, 23:19.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq