Jump to content


Photo

Arquivo .txt Como Banco De Dados


  • Faça o login para participar
1 reply to this topic

#1 H²O

H²O

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

Posted 11/08/2004, 07:11

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.


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¹

#2 H²O

H²O

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

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?
Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq