Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, tenho uma dúvida tenho um arquivo de texto com as seguintes informações:
VendedorEmail = email@example.com.br;
TransacaoID = 2AE26C7C553F42E6B;
Referencia = 11;
Extras = 0,00;
TipoFrete = FR;
ValorFrete = 0,00;
eu precisava retornar desse arquivo apenas as informações ANTES do "=", então utilizei a função preg_replace(); dessa forma:
$Trata_Dados2 = preg_replace("/(\w+) = (\w+)/", "$1", $linha);
esse é o código inteiro:
<?php
$arquivo = fopen ("ps/ps.txt", "r+");
$num_linhas = 0;
while (!feof ($arquivo)) {
if ($linha = fgets($arquivo)){
$num_linhas++;
$Trata_Dados2 = preg_replace("/(\w+) = (\w+)/", "$1", $linha);
echo $Trata_Dados2."<br><br>";
}
}
fclose ($arquivo);
?>
O que retorna é:
VendedorEmail@example.com.br;
TransacaoID;
Referencia;
Extras,00;
TipoFrete;
ValorFrete,00;
eu queria que retornasse apenas:
VendedorEmail
TransacaoID
Referencia
Extras
TipoFrete
ValorFrete
Alguém Pode Ajudar desde já Grato ^^
>
Com o preg_replace você está fazendo uma substituição.
Tente usar preg_match
Mas com o preg_match ele me retornará 0 ou 1, a intenção é essa mesmo substituir isso:
VendedorEmail = email@example.com.br;
por isso apenas:
VendedorEmail
substituir isso:
TransacaoID = 2AE26C7C553F42E6B;
por isso:
TransacaoID
etc...
E assim consecutivamente até o termino do arquivo de texto.
Sim. Mas, você pode passar um array no terceiro parametro, que será preenchido com os valores encontrados.
Exemplo:
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',"http://www.php.net/index.html", $matches);
print_r($matches);
?>
>
Sim. Mas, você pode passar um array no terceiro parametro, que será preenchido com os valores encontrados. Exemplo:<br>
<br><div><?php</div><div>// get host name from URL</div><div>preg_match('@^(?:http://)?([^/]+)@i',</div><div> "http://www.php.net/index.html", $matches);</div><div>print_r($matches);</div><div>?></div>
<br><br><br><a href="[http://www.php.net/manual/en/function.preg-match.php"](http://www.php.net/manual/en/function.preg-match.php) class="bbc_url" title="Link externo" rel="nofollow external">[http://www.php.net/m....preg-match.php](http://www.php.net/m....preg-match.php)
Fiz uma Gambiarra e consegui o que eu queria Obrigado pela ajuda:
$arquivo = fopen ("ps/ps.txt", "r+");
$num_linhas = 0;
while (!feof ($arquivo)) {
if ($linha = fgets($arquivo)){
$num_linhas++;
$array = array("@" => "", "." => "", "," => "", "/" => "", ":" => "", " = " => " ", " " => "", ";" => "");
$strtr = strtr($linha, $array);
$Trata_Dados2 = preg_replace("/(\w+) (\w+)/", "$1", $strtr);
$Retira_Espaco = str_replace(' ', '', $Trata_Dados2);
echo $Retira_Espaco."<br><br>";
}
}
fclose ($arquivo);
O resultado ficou assim:
VendedorEmail
TransacaoID
Referencia
Extras
TipoFrete
ValorFrete
Valeu mesmo pelo tempo Leandro Chaves!
hey isso é apenas para pegar o post do PagSeguro?
Faz isso não... vai estar gastando muito processamento sem necessidade, gravar arquivo, ler arquivo, usar expressão regular...
usar um foreach e percorre o array pegando o valor dele
foreach ($_POST as $key => $value){
}
$key seria o VendedorEmail
$value seria email@example.com.br
Assim para todos os itens do post
Mas com o Foreach não funcionou comigo =/
Com o preg_replace você está fazendo uma substituição.
Tente usar preg_match