Ir para conteúdo
Fórum Script Brasil
  • 0

Arquivos Txt, To Apanhando Do Php Aqui!


H²O

Pergunta

Olá amigos,

Estou fazendo uma classe simples pra uso de TXT em banco de dados.

Ela ainda não está nem na metade, até agora apenas lê o que seria o ID no TXT.

Fiz uma função para ler a ultima linha do arquivo dar explode e pegar oque vem antes do " | ", então se estiver assim

01|olá|blablabla

02|olá|blablabla

Ela vai ler o 02 e retornar, até aí tudo bem funcionou, então fiz uma função para pegar o que seria o ID e acrescentar +1, e fiz outra pra pegar o ID incrementado e gravar (essa é apenas para testes), mais daí vem o problema, a função que grava usa a permissão "a" oque seria a certa pois ela posiciona o ponteiro no fim do arquivo, então era pra ele gravar em nova-linha o ID novo, so que não está funcionando corretamente, eu tenho que usar o newline (\n) no conteudo que vai ser gravado, ele aceita e grava, mais não grava corretamente grava apenas 01, ou seja ele deixa de ler a ultima linha e grava 01 (por causa do incremento ele grava 01).

Depois de muito testar mudei a permissão para "w" que é escrita mais posicionando o ponteiro no inicio do arquivo, funciona!!, ele pega o novo Id grava normalmente mais porém ele apaga tudo e escreve na primeira linha (não é pra ser assim).

Bom já expliquei agora vo postar o código, se alguém puder me ajudar seria de grande valia.

<?php
#Classe de Arquivos de texto como DB (0.1 beta);
Class TXT {
               var $fop;
               var $fw;
               var $fc;
               var $ident;
               var $id;
               var $nid;



      function aEscrever($nome, $conteudo) {
               if(!file_exists($nome)) { aErro('01'); return ""; }

               $fop   =  @fopen($nome, "a");          if($fop == FALSE) {$this->aErro('02'); return "";};
               $fw    =  @fwrite($fop, "$conteudo|oi\r\n");    if($fw == FALSE)  {$this->aErro('03'); return "";};
               $fc    =  @fclose($fop);               if($fc == FALSE) {$this->aErro('04');  return "";};


                }


       function aErro($cod) {
       $err['01']    =     "Arquivo inexistente.";
       $err['02']    =     "Falha ao abrir arquivo.";
       $err['03']    =     "Falha ao escrever no arquivo.";
       $err['04']    =     "Erro ao Fechar.";
       $err['05']    =     "Erro ao fazer leitura de linha unica no arquivo.";
       $erro = $err[$cod];
       $this->MostrarErro($erro);

       }

       function MostrarErro($erro) {
       header("Location: erro.php?erro=$erro");

       }

       function LastId($nome) {
        $fop   =  @fopen($nome, "r");   if($fop == FALSE) {$this->aErro('01'); return "";};
        while(!@feof($fop)) {
        $ident = @fgets($fop);
        }

        $this->exp         = explode("|", $ident);
        $this->id          = $this->exp['0'];
        $this->fc          = @fclose($fop);         if($this->fc == FALSE) {$this->aErro('04'); return "";};
        }

        function NovoId($nome) {
         $this->LastId($nome);
         $this->nd = $this->id + 01;
         if($this->nd <= 9)
         {
         $this->nid = "0".$this->nd;
         }else {
         $this->nid = $this->nd;
         }
         }

         function GravarNovoId($nome){
         $this->NovoId($nome);
         $this->aEscrever($nome, $this->nid);
         }
         
}

$TXT = new TXT;
$TXT->GravarNovoId('teste.txt');
echo $TXT->nid;
?>

PS: ai ela está mudada, pois estou apenas fazendo testes pra ver se da certo e como ficaria mais ou menos depois vou re-escrevela, mais me ajudem por favor, to tomando um coro dessa classezinha hehehe.

Abraços

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

Ah achei oque está dando erro!!

È que a ultima linha esta ficando em branco, exemplo

01|oioioi

02|oioioi

---( aqui ta ficando em branco no aruqivo)---

Ai o Script simplesmente le o espaço em branco e soma 1, por isso está ficando 01 o valor do ID, como faço pra ele gravar sem deixar a ultima linha em branco?

Link para o comentário
Compartilhar em outros sites

  • 0

"a+" é a mesma coisa que "a", porem com permissão pra leitura e escrita

e outra coisa eu faço e já fiz sistemas de cadastro completo em txt

se quiser olhar no tópico suspenso la tem um que eu postei

e ta +- do jeito que você quer

'r' Abre somente leitura; coloca o ponteiro do arquico no começo do arquivo.

r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.

'w' Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'w+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'a' Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.

'a+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.

http://br2.php.net/fopen

Link para o comentário
Compartilhar em outros sites

  • 0

Eu já tentei usar "a+" oque dá na mesma de "a" pois so adiciona permissão pra leitura, isso não elimina a ultima linha em branco, acho que você não intendeu minha duvida, não é quanto a permissão e sim como tirar ou ignorar a ultima linha em branco.

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que vocês ainda não entenderam a pergunta tongue.gif.

Seguinte o script ai lê a ultima linha corretamente, e gera novo ID apartir dela, oque estou dizendo é que, a função de gravar ou a leitura do arquivo está fazendo com que se gere uma ultima linha em branco, fazendo assim bugar o script pois ele não lê a informação anterior e sim a linha em branco, oque eu queria era que ele NÂO gerasse a linha em branco.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara eu acho que essa última linha existe por causa do método como você está gravando os registros.

Você grava a linha e põe "\r\n". Então sempre que acabar a linha, ele vai pular para a próxima, mesmo que não haja mais o que ser escrito.

Tenta montar um esqueminha pra pular a linha no início do arquivo.

De repente isso resolve o seu problema... wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Agora olhe o meu post lá em cima e veja o que eu fiz....

Eu coloquei a quebra de linha no inicio ....

Não resolvi para você por que queria ver se você sabia abstrair as idéias dos outros...

Mas o Error404 foi lá e te decifrou a charada....

Da proxima vez, procure olhar o EXEMPLO e ADAPTAR para o que você necessita...

OBS. Mas essa baitolagem pode continuar falando pro Error mesmo...heheheheh

Até +

cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente não sou muito bom em nenhum tipo de charada, mais meu erro acho que não foi incompetência foi mais falta de atenção por não ter notado antes.

Já notaram que em todo exemplo de loop com for usam 'i' como variavel? heheheh eu sempre vejo isso =]

Link para o comentário
Compartilhar em outros sites

  • 0

Usei o $i por ser mais rápido.....

Nos meus códigos, costumo usar um padrão mais ou menos assim

inteiro - iNumero

string - sPalavra

boolean - bFlag

objeto - objDBConn

... existem conveções para programação orientada a objeto... mas nem sempre é seguido....

Apesar de isso não fazer menor sentido... o programa vai funcionar do mesmo jeito!!!!

Até +

cool.gif

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...