Ir para conteúdo

POWERED BY:

Arquivado

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

WilliamCalw

trabalhar com arquivo TXT com separador - localizar campo

Recommended Posts

Boa tarde a todos.

Estou trabalhando em um script no qual deveria ler um txt com separador e copiar o campo cep e colocar no final do arquivo

Ex:

*arquivo - entrada

nome |CEP |pc
pedro |08557-300|1
bino |08575-530|1
ana |02083-080|1
maria |03165-003|1
*arquivo saída
nome |CEP |pc|CEP Barra|
pedro |08557-300|1| /08557300\|
bino |08575-530|1|/08575530\|
ana |02083-080|1|/0283080\|
maria |03165-003|1|/03165003\|
O problema maior esta em retornar a posição do campo CEP e como trabalhar com ela!
Nao sei se alguém intendeu rsrs
Mais agradeço a ajuda desde já!!!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, sou novo no PHP,
Eu fisso ...

<?
$arquivo_entrada = fopen("teste.txt","r");
$arquivo_saida = fopen("teste_ok","w+");

while(!feof($arquivo_entrada)) {
    
   $linha=fgets($arquivo_entrada);
   $fwrite($arquivo_saida,$linha);

}
fclose($arquivo_entrada);
fclose($arquivo_saida);
?>

minha duvida é como vou pegar o campo e pq posso utilizar substr($linha,1,10) porem como é um arquivo com separador a posição do CEP nao é a mesma, então queria pegar por campo, não sei se é assim ...


$find="CEP";
$result=explode("|", $linha);
$posição=strpos($result,$find)

nao consigo retornar a posição, tipo posição e depois utilizar para as outras linhas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tiver certeza que sempre os 3 campos vão estar presentes, você está no caminho certo usando o explode. A variável result vai ter um array de 3 elementos, onde o segundo (índice 1), será sempre o CEP. Basta utilizar ele no que você quer fazer. Teste isso só pra você ver que sempre vai ser escrito o CEP.

 

 

$result = explode("|", $linha);

echo $result[1];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alexandre Mota.

 

O ruim é que quando tento testar em um echo para ver se aparece so a posição do CEP da erro no PHP

<?php
$arquivo_entrada = fopen("teste.txt","r");
$find="CEP";
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$posicao=strpos($result,$find);


echo  $posicao;



fclose($arquivo_entrada);

?>

versao bem resumida

Compartilhar este post


Link para o post
Compartilhar em outros sites

É dessa forma:

 

<?php
$arquivo_entrada = fopen("teste.txt","r");
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);

echo $result[1];


fclose($arquivo_entrada);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se colocar while para ele exibir so a coluna do CEP ele demora para carregar, ...

O trabalhado é assim, eu vou receber arquivos que o campo CEP nem sempre fica na posição [1], cada arquivo é cada arquivo, eu preciso fazer isso .:

while(!feof($f)) {
	 $linha=fgets($f);
     $parc = trim(substr($linha,$ini-1,$tmh));
     if($parc == $pc)    {
            fwrite($arquivosaida,$linha);

            if ($linha = feof($f)){
               echo "Executado com sucesso";
                              }
            }
        }

So que ao invés de pegar a posição do caracteres ele pega o campo como o arquivo abaixo..

 

AVISO|INSCRICAO|CEP|QTDE_PARCELA
37010|22.0009.0017-001 |01014-000|11
37011|22.0009.0017-002 |01014-000|11
37012|18.0022.0001-022 |01014-000|11
37013|18.0022.0011-018 |01014-000|11
37014|18.0022.0011-107 |01014-000|11
37015|21.0045.0020-000 |01015-000|11
o script deveria localizar só a palavras CEP e pegar o valor da array exemplo 2 e no looping while o campo 2 ira valer para todas as linhas seguintes
...
Bom nao sei se to conseguindo me explicar direito, mais apos ler o arquivo deveria sair mais ou menos assim
AVISO|INSCRICAO|CEP|QTDE_PARCELA|CEP_BARRA
37010|22.0009.0017-001 |01014-000|11|/01014000\
37011|22.0009.0017-002 |01014-000|11|/01014000\
37012|18.0022.0001-022 |01014-000|11|/01014000\
37013|18.0022.0011-018 |01014-000|11|/01014000\
37014|18.0022.0011-107 |01014-000|11|/01014000\
37015|21.0045.0020-000 |01015-000|11|/01015000\
Que seria o codigo de barras


tipo isso que to tentando fazer ...

<?php
$arquivo_entrada = fopen("teste.txt","r");
$find="CEP";
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$key=array_search($find,explode);
//$posicao=strpos($result,$find);

while(!feof($arquivo_entrada)) {

echo  $result[$key];
}


fclose($arquivo_entrada);

?>

Mais só fica carregando, acho que entrou em looping :sick:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi o que você quer. Acredito que isso funcione:

$arquivo_entrada = fopen("teste.txt","r");
$find="CEP";
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$posicao=array_search($find,$result);

echo $posicao;


fclose($arquivo_entrada);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso mesmo funcionou, mais vc sabe me dizer pq nao roda no while colocando echo $result[$posicao]; tecnicamente esse seria o campo do cep



Consegui, mais apresenta erro na linha 13, ate exibe o valor em uma linha so

<?php
$arquivo_entrada = fopen("teste.txt","r");
$find="CEP";
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$posicao=array_search($find,$result);

echo $posicao;
while (!feof($arquivo_entrada)) {
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);

echo $result[$posicao]. "\n";

}


fclose($arquivo_entrada);

?>

e nao fica embaixo do outro nao era so colocar o ."\n"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não está lendo as linhas dentro do while. Por isso nunca vai chegar ao final do arquivo, entrando em loop eterno. Um detalhe que eu nem tinha prestado atenção é que você já tinha feito o que eu sugeri, com o array_key, só o erro foi que você informou a variável errada no segundo parâmetro. Deveria ser $key=array_search($find,$result). Quanto ao loop, faça isso:

 

 

while(!feof($arquivo_entrada)) {

$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
echo $result[$key];

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa Alexandre, Muito obrigado pela ajuda .. o codigo ficou assim

<?php
$arquivo_entrada = fopen("teste.txt","r");
$find="CEP";
$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$key=array_search($find,$result);


while (!feof($arquivo_entrada)) {

$linha=fgets($arquivo_entrada);
$result=explode("|",$linha);
$var=$result[$key];

echo $var. "• \n";
echo trim(substr($var,0,3));
}


fclose($arquivo_entrada);

?>

So estou testando agora, tentando entender melhor, ainda aparece um erro de

 

Notice: Undefined offset: 2 in

 

e nao quebra a linha ..

so que agora so amanha! Por hoje muito obrigado mesmo :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade Paulo, não tinha tentado colocar ainda mais muito obrigado,

Agora vou tentar continuar a desenvolver minha ideia!

 

Mais minha pergunta desse tópico foi respondida!

Grato a todos vocês !

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.