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 alguem puder me ajudar seria de grande valia.
Arquivo .txt Como Banco De Dados
Started By H²O, 11/08/2004, 07:11
1 reply to this topic
#1
Posted 11/08/2004, 07:11
PHP |
<?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
Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹
H²O¹
#2
Posted 12/08/2004, 03:29
Achei o erro do Script
Ele tá adicioanndo 2 newlines
Exemplo:
---------------------------
01|Isso é um teste
02|Isso é um exemplo
----------------------------
O correto ai era ele ler 02 e incrimentar pra ficar 03 correto? mais note que debaixo de 02 ficou uma linha em branco, então ele tá somente lendo ela e incrimentando, como faço para na hora de gravar ele não deixar essa linha em branco?
Ele tá adicioanndo 2 newlines
Exemplo:
---------------------------
01|Isso é um teste
02|Isso é um exemplo
----------------------------
O correto ai era ele ler 02 e incrimentar pra ficar 03 correto? mais note que debaixo de 02 ficou uma linha em branco, então ele tá somente lendo ela e incrimentando, como faço para na hora de gravar ele não deixar essa linha em branco?
Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹
H²O¹
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)