drop3 0 Denunciar post Postado Março 2, 2010 Olá amigos! Tenho um arquivo .txt e gostaria de incluir delimitadores do tipo ";","|", no fim de cada campo. Este é o arquivo com os registros: Gostaria que ao final de cada nome tivesse um delimitador como falado antes. Ex: MARIO ROBERTO GASTALDI | MILZA MARIA DOS SANTOS | 19660716 Se puderem ajudar! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Daniloinf 3 Denunciar post Postado Março 2, 2010 Isto vai depender de como você esta gerando estes campos. Você tem o código ai? Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 Isto vai depender de como você esta gerando estes campos. Você tem o código ai? Não, eu recebi este arquivo já desta forma, isto é, foi exportado já dessa forma. Pretendia então acrescentar os delimitadores pelo php. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 2, 2010 $input = fopen('arquivo.txt','rb'); $output = fopen('arquivo_delimitado.txt','wb'); while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); fclose($input); fclose($output); Compartilhar este post Link para o post Compartilhar em outros sites
Daniloinf 3 Denunciar post Postado Março 2, 2010 aHHh, saquei... Você pode usar funções como substr() e explode() para fazer isso. Eu pensei em retirar os 3 campos usando substr (já que o tamanho é padrão) e depois jogar os espaços fora com explode, ai você junta tudo com o delimitador que você quiser. Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 $input = fopen('arquivo.txt','rb'); $output = fopen('arquivo_delimitado.txt','wb'); while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); fclose($input); fclose($output); Deu este erro: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs... on line 4 Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 aHHh, saquei... Você pode usar funções como substr() e explode() para fazer isso. Eu pensei em retirar os 3 campos usando substr (já que o tamanho é padrão) e depois jogar os espaços fora com explode, ai você junta tudo com o delimitador que você quiser. Mais como retirar os campos se não tenho o tamanho deles? Poderia exemplificar? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 2, 2010 vacilo meu antes while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); depois while (false !== ($linha = fgets($input))) fputs($output,preg_replace('/\b\t/','\b | \t',$linha)); Compartilhar este post Link para o post Compartilhar em outros sites
Daniloinf 3 Denunciar post Postado Março 2, 2010 Mais como retirar os campos se não tenho o tamanho deles? Poderia exemplificar? O Evandro deu uma resposta muito mais simples.XD Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 vacilo meu antes while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); depois while (false !== ($linha = fgets($input))) fputs($output,preg_replace('/\b\t/','\b | \t',$linha)); Foi uma boa, mais ele simplismente duplicou o arquivo com outro nome (arquivo_delimitado.txt) e sem escrever o delimitador http://forum.imasters.com.br/public/style_emoticons/default/excl.gif Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 2, 2010 esses espaços são TAB's ou SPACE's ?? se forem espaços digitados um a um no teclado não vai dar mesmo, vai ter que fazer outra substituição: antes while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); depois while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b','\b | ',$linha)); para nos resumirmos no processo desse tópico, vamos nos focar apenas nesta parte aqui: while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); OK? Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 São SPACE´S, a base foi gerada com tamanho padrão para os campos. Logo deveria dar certo. A dúvida é como contar os espaços e substituir eles? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 2, 2010 A minha última sugestão, SE trabalhar no seu arquivo vai bagunçar todos os nomes, ignore-a com ER você não precisa contar. já vi que é um pouco mais complexo do que parecia ser. troque while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); por while (false !== ($linha = fgets($input))) { $linha = preg_replace('( )*','\t',$linha); // aqui trocamos apenas espaços duplos por TAB's $linha = preg_replace(' ?$','',$linha); // aqui removemos qualquer espaço remanescente antes da quebra de linha $linha = preg_replace('\t',' | \t',$linha); // por fim, adicionamos o delimitador fputs($output,$linha); // gravamos a saída } Compartilhar este post Link para o post Compartilhar em outros sites
drop3 0 Denunciar post Postado Março 2, 2010 :( Nada feito: Warning: preg_replace() [function.preg-replace]: Unknown modifier '*' in C:\xampp\htdocs\... on line 5 Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\... on line 6 Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\... on line 7 Acredito que a última sugestão: while (false !== ($linha = fgets($input))) fputs($output,preg_replace('\b\t','\b | \t',$linha)); Dava mais certo, o problema era tratar "preg_replace('\b\t','\b | \t',$linha));" Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 2, 2010 to sem condições de fazer testes, pois não estou no laboratório habitual... mas vamos por tentativa e erro.. não desista! procure estudar um pouquinho de expressões regulares e fazer suas tentativas por conta própria tb (duas cabeças pensam melhor que uma) a última eu fiz tão correndo (horário de almoço) que esqueci os delimitadores... vamos lá while (false !== ($linha = fgets($input))) { $linha = preg_replace('( )*','\t',$linha); // aqui trocamos apenas espaços duplos por TAB's $linha = preg_replace(' ?$','',$linha); // aqui removemos qualquer espaço remanescente antes da quebra de linha $linha = preg_replace('\t',' | \t',$linha); // por fim, adicionamos o delimitador fputs($output,$linha); // gravamos a saída } vira while (false !== ($linha = fgets($input))) { $linha = preg_replace('/\b {2,}/',' | \t',$linha); // troca bordas de palavra seguidas de 2 ou + espaços por um espaço, delimitador, espaço e um tab fputs($output,$linha); // gravamos a saída } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Março 2, 2010 mas vamos por tentativa e erro.. Hummm, tentativa e erro é muito caro, hehehe $arquivo = 'arquivo.txt'; file_put_contents( $arquivo , preg_replace( '/(\s{2,})/' , '$1|' , file_get_contents( $arquivo ) ) ); Compartilhar este post Link para o post Compartilhar em outros sites
MIdNight 0 Denunciar post Postado Março 3, 2010 Não seria mais fácil um simples ctrl + h do bloco de notas? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 3, 2010 mas vamos por tentativa e erro.. Hummm, tentativa e erro é muito caro, hehehe $arquivo = 'arquivo.txt'; file_put_contents( $arquivo , preg_replace( '/(\s{2,})/' , '$1|' , file_get_contents( $arquivo ) ) ); Poxa, valeu o socorro, João. Ontem tava sem condições de testar, senão faria a tentativa-e-erro aqui, seria rapidinho ;) Tenho que me habituar a utilizar o \s ao invés de espaços Não seria mais fácil um simples ctrl + h do bloco de notas? Aí toda vez que precisarem fazer o parse no arquivo gerado, eles ligam pra você "dar um ctrl + h"????? to fora! drop3, o João solucionou o problema com uma iteração mais simples ainda que a proposta. Se desejar um espaço APÓS o delimitador, basta trocar '$1|' por '$1| ' Compartilhar este post Link para o post Compartilhar em outros sites
MIdNight 0 Denunciar post Postado Março 4, 2010 Pelo que eu tinha entendido ele não iria adicionar valores, apenas ia alterar os existentes. Compartilhar este post Link para o post Compartilhar em outros sites