Luis Vagner Postado Março 12, 2009 Denunciar Share Postado Março 12, 2009 (editado) Pessoal, estou com um problemão e não estou conseguindo resolver...Estou abrindo e lendo todo o conteudo de um arquivo txt porém eu preciso do seguinteSe no 43 caractere tiver um espaço e o 38 caractere for igual 9 e se o 39 caractere for igual a 1 então ele coloca "SMT" no espaço do 43 caractere.isso ele vai fazer para todas as linhas do txt.Só para entender melhor segue o conteudo do txt000200922320090226041720090227013900009123 C0000000000499Ficaria assim:(Obs: tinha 7 espaços em branco entre o 3 e o C com a inclusão do SMT ficou apenas 4 espaços em branco)000200922320090226041720090227013900009123SMT C0000000000499 Editado Março 16, 2009 por Luis Vagner Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Vagner Postado Março 12, 2009 Autor Denunciar Share Postado Março 12, 2009 coisa de maluco mesmo né!? rs..rs.. heheeu estou tentando assim, mas ele loja o DID em tudo que é espaço e junta todas as linhas...// abre o arquivo colocando o ponteiro de escrita no final$arquivo = fopen('Conversao_09032009_0758.txt','r+');if ($arquivo) {while(true) {$linha = fgets($arquivo);if ($linha==null) break;// busca na linha atual o conteudo que vai ser alteradoif (preg_match("/ /", $linha)) {$string .= str_replace(" ","DID", $linha);}else {$string.= $linha;}}// move o ponteiro para o inicio pois o ftruncate() não fara issorewind($arquivo);// truca o arquivo apagando tudo dentro deleftruncate($arquivo, 0);// reescreve o conteudo dentro do arquivoif (!fwrite($arquivo, $string)) die('Não foi possível atualizar o arquivo.');echo 'Arquivo atualizado com sucesso';fclose($arquivo);} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Vagner Postado Março 13, 2009 Autor Denunciar Share Postado Março 13, 2009 Pessoal já estou quase conseguindo fazer a bagaça rs..rs.. minha dúvida agora é como faço para inserir por exemplo o SBC no primeiro espaço em brando da esquerda para a direita da linha mantendo a estrutura de todo txt na mesma forma depois?$arquivo = "Conversao_09032009_0758.txt";//Verifica se o arquivo existe if (file_exists($arquivo)) { $fp = fopen($arquivo,"r+"); $f_contents = file ($arquivo); //Se o arquivo tiver algum conteúdo if ($f_contents == TRUE){ foreach ($f_contents as $linha) { $corta = substr($linha,42,1); $cond1 = substr($linha,38,1); $cond2 = substr($linha,39,1); if ($corta == " " and $cond1 =="9" and $cond2 =="2"){ preg_match(" ", $linha); $string .= str_replace(" ", "SBC", $linha); // move o ponteiro para o inicio pois o ftruncate() não fara isso rewind($fp); // truca o arquivo apagando tudo dentro dele ftruncate($fp, 0); // reescreve o conteudo dentro do arquivo if (!fwrite($fp, $string)) die('Não foi possível atualizar o arquivo.'); echo "Arquivo atualizado com sucesso"; echo "<b>SBC</b><br>"; }else{ echo "<b>Existe conteúdo no caractere 44!</b><br>"; } } fclose($fp); }//Se não tiver nenhum conteúdo no arquivo mostra a mensagem else{ echo "O arquivo $arquivo não tem nenhum conteúdo!"; } }//Se não existir o arquivo mostra a mensagem else { echo "O arquivo $arquivo não existe";} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Março 13, 2009 Denunciar Share Postado Março 13, 2009 Só uma observação, existe um botão Editar -> , use ele, pois postar de forma seguida caracteriza up/flood, o que é contra as regras. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Vagner Postado Março 16, 2009 Autor Denunciar Share Postado Março 16, 2009 Pessoal consegui com que ele jogue as informações certas na devida posição, porém ele está apagando todo o conteúdo e deichando apenas os valores que foram alterados, como faço para ele manter o restante das informações do txt mudando apenas as linhas que devem ser alteradas? segue abaixo o script<?php$arquivo = "Conversao_09032009_0758.txt";//Verifica se o arquivo existeif (file_exists($arquivo)) {$fp = fopen($arquivo,"r+");$f_contents = file ($arquivo);//Se o arquivo tiver algum conteúdoif ($f_contents == TRUE){foreach ($f_contents as $linha) {$novo = substr($linha,0,48);$pega_conteudo = substr($novo,0,42);$corta = substr($linha,42,1);$cond1 = substr($linha,38,1);$cond2 = substr($linha,39,1);if ($cond1=="9" and $cond2=="1"){$alt = $pega_conteudo."SMT ";}if ($cond1=="9" and $cond2=="2"){$alt = $pega_conteudo."SBC ";}if ($cond1=="9" and $cond2=="3"){$alt = $pega_conteudo."PIR ";}if ($cond1=="9" and $cond2=="4"){$alt = $pega_conteudo."DID ";}if ($cond1=="9" and $cond2=="5"){$alt = $pega_conteudo."JAQ ";}if ($cond1=="9" and $cond2=="6"){$alt = $pega_conteudo."STO ";}if ($cond1=="9" and $cond2=="7"){$alt = $pega_conteudo."STL ";}if ($corta == " "){preg_match($novo, $linha);$string .= str_replace($novo, $alt, $linha);// move o ponteiro para o inicio pois o ftruncate() não fara issorewind($fp);// truca o arquivo apagando tudo dentro deleftruncate($fp, 0);// reescreve o conteudo dentro do arquivoif (!fwrite($fp, $string)) die('Não foi possível atualizar o arquivo.');echo "Arquivo atualizado com sucesso<br>";}else{echo "<b>Existe conteúdo no caractere 44!</b><br>";}}fclose($fp);}//Se não tiver nenhum conteúdo no arquivo mostra a mensagemelse{echo "O arquivo $arquivo não tem nenhum conteúdo!";}}//Se não existir o arquivo mostra a mensagemelse {echo "O arquivo $arquivo não existe";}?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Luis Vagner
Pessoal, estou com um problemão e não estou conseguindo resolver...
Estou abrindo e lendo todo o conteudo de um arquivo txt porém eu preciso do seguinte
Se no 43 caractere tiver um espaço e o 38 caractere for igual 9 e se o 39 caractere for igual a 1 então ele coloca "SMT" no espaço do 43 caractere.
isso ele vai fazer para todas as linhas do txt.
Só para entender melhor segue o conteudo do txt
000200922320090226041720090227013900009123 C0000000000499
Ficaria assim:(Obs: tinha 7 espaços em branco entre o 3 e o C com a inclusão do SMT ficou apenas 4 espaços em branco)
000200922320090226041720090227013900009123SMT C0000000000499
Editado por Luis VagnerLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.