Ir para conteúdo

POWERED BY:

Arquivado

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

Gantuz

[Resolvido] Como manipular vários arquivos ao memso tempo?

Recommended Posts

Boa Tarde Pessoal!

 

Eu criei esse código abaixo para poder ler um arquivo HTML e seu conteúdo.

 

A intenção era navegar pelas Tags para poder pegar alguns elementos. Está funcionando como eu queria, porém, esse esqueminha está lendo um único arquivo.

 

COMO EU PODERIA FAZER, PARA QUE ELE LESSE E APLICASSE ESTE CÓDIGO QUE ESTOU MONTANDO PARA TODOS OS ARQUIVOS .HTM QUE TENHO EM UM DIRETÓRIO?

 

Porque, digamos que tenho 1450 arquivos .HTM, eu não vou fazer isso, um por um, correto?! Qual o meio de se aplicar de maneira totalizada? Inclusive já tentei criando funções, mas como sou iniciante em PHP, não estou muito familiarizado com criações de funções e não deu muito certo.

 

Segue o código abaixo:

 

 

<?php

$doc = new DOMDocument;
$doc->loadHTMLfile('clipping017.htm');

//Pegando o Elemento <body>
$body = $doc->getElementsByTagName('body');

//Para poder pegar o texto 'Estado de Minas | 30 de Fevereiro de 2007 | Para crescer junto e as Imagens'
foreach($body as $body){
$table = $body->getElementsByTagName('table');
$imagem = $body->getElementsByTagName('img');

//Pegar o Texto
foreach($table as $table){
$td = $table->getElementsByTagName('td');
foreach($td as $td){
$font = $td->getElementsByTagName('font');
foreach($font as $font){
$texto = trim($font->nodeValue);
break;
}
}
}
$img=array();
$x=0;

//Pegar as Imagens
foreach($imagem as $imagem){
if($imagem->getAttribute('src')!=='dot_transp.gif'){
$imgSrc = $imagem->getAttribute('src');
$imgW = $imagem->getAttribute('width');
$imgH = $imagem->getAttribute('height');
$img[$x] = '<'.$imagem->tagName.' src="'.$imgSrc.'" width="'.$imgW.'" heigth="'.$imgH.'">';
$x++;
}
}
}

//Separando o texto para poder retornar titulo e data
$texto = explode("|",$texto);
//Recebe o Titulo ::: Estado de Minas
$titulo = trim($texto[0]);
//Recebe a data por extenso
$data = explode(" de ",$texto[1]);

//Condição para transformar o mes por escrito em numeral
if($data[1]=='Janeiro'){
$data[1]="01";
}
elseif($data[1]=='Fevereiro'){
$data[1]="02";
}
elseif($data[1]=='Março'){
$data[1]="03";
}
elseif($data[1]=='Abril'){
$data[1]="04";
}
elseif($data[1]=='Maio'){
$data[1]="05";
}
elseif($data[1]=='Junho'){
$data[1]="06";
}
elseif($data[1]=='Julho'){
$data[1]="07";
}
elseif($data[1]=='Agosto'){
$data[1]="08";
}
elseif($data[1]=='Setembro'){
$data[1]="09";
}
elseif($data[1]=='Outubro'){
$data[1]="10";
}
elseif($data[1]=='Novembro'){
$data[1]="11";
}
elseif($data[1]=='Dezembro'){
$data[1]="12";
}
else{
print "A data nao e' valida!";
}

//Data no formato dd/mm/aaaa.
$data = trim($data[0].'/'.$data[1].'/'.$data[2]);

//var_dump($titulo,$data,$img);

print'
<table border="1" align="center">
<tr>
<td align="center">'.$titulo.'<font color="red"><strong> ::: ISTO E\' APENAS UM TESTE :::</strong></font></td>
</tr>
<tr>
<td>Data da Reportagem: '.$data.'</td>
</tr>';

foreach($img as $img){

print'
<tr>
<td align="center">'.$img.'</td>
</tr>';
}
print'
</table>';

?>

AGRADEÇO DESDE JÁ TODA AJUDA FORNECIDA.

 

GABRIEL ANTUNES

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que teu script funciona você precisa fazer agora um tipo de laço pra ele..

 

em $doc->loadHTMLfile('clipping017.htm');

 

em vez de colocar um arquivo seria uma variavel. $var

 

Eu fiz uma vez algo parecido passando por exemplo uma variavel separada por "-" onde cada campo era um arquivo q eu precisava..

 

por exemplo no seu caso:

 

"pagina1.html-pagina2.html-pagina3.html" eu passava esse texto como variavel pra uma pagina.

 

Nessa pagina eu separava os campos pelo "-" .

 

EX:

 

$var="pagina1.html-pagina2.html-pagina3.html";

$pega=explode("-",$var);

$conta=count($pega);

for($i=0;$i<=$conta;$i++)

{

//AQUI DENTRO você FAZ O LACO COM A TUA FUNCAO EX:

$doc->loadHTMLfile($pega[$i]);

}

 

assim ele faz o script com todos os teus arquivos.

 

Agora você como quer fazer para passar os arquivos.

 

Espero ter ajudado

 

AbraçO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que teu script funciona você precisa fazer agora um tipo de laço pra ele..

 

em $doc->loadHTMLfile('clipping017.htm');

 

em vez de colocar um arquivo seria uma variavel. $var

 

Eu fiz uma vez algo parecido passando por exemplo uma variavel separada por "-" onde cada campo era um arquivo q eu precisava..

 

por exemplo no seu caso:

 

"pagina1.html-pagina2.html-pagina3.html" eu passava esse texto como variavel pra uma pagina.

 

Nessa pagina eu separava os campos pelo "-" .

 

EX:

 

$var="pagina1.html-pagina2.html-pagina3.html";

$pega=explode("-",$var);

$conta=count($pega);

for($i=0;$i<=$conta;$i++)

{

//AQUI DENTRO você FAZ O LACO COM A TUA FUNCAO EX:

$doc->loadHTMLfile($pega[$i]);

}

 

assim ele faz o script com todos os teus arquivos.

 

Agora você como quer fazer para passar os arquivos.

 

Espero ter ajudado

 

AbraçO!

 

Se ajudou???????????????????????? Cara você mostrou a luz no fim do túnel... rssrrsrsrs Valeu mesmo... coisa boa.... só tive que fazer uma mudançazinha pra funcionar....

 

Utilizei uma função chamada glob, e pedi que fosse feito para todos os arquivos chamados HTM e joguei dentro de uma variável... o que me retornou um array, e com isso eu fui fechando cada loop fui dando unset, aí eu adquiria outro elemento do array para abrir e no final joguei para variáveis correspondende a titulo, a data e as imagens.

 

Mas peguei sua idéia na integra. Como notei que tava dando erro no load, achei que teria que fazer exatamente o contrario...

 

$arqHTM = glob('*.htm');

 

foreach($arqHTM as $arqHTM){

 

(...)

 

 

http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif Valeu mesmo camarada!!!!!Muito Obrigado pela ajuda!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Gantuz.

 

unset($doc);

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que ajudou brother!

 

Quem quiser add pra gente trocar idéia tamo aí.

 

davidportella@hotmail.com

 

POw, jah eh mesmo.... Anota o meu: gabriel_muleque@hotmail.com (MSN) // gabrielantunes.cruz@gmail.com (email)

 

Abraços!!!

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.