Logs -
Andinho - 19.08.2016
Ola todos, minha duvida й a seguinte,eu tava criando um simples sistema de logs para minhas Orgs, logs que salvam quando usam /pedircontas, /contaslider, /convidar, etc, pois bem, meu problema й na hora de ler os arquivos, tipo, eu coloquei para ler apenas 14 linhas, para nao flodar um dialog, usei o dialog estilo lista, ele ler as 14 linhas perfeitamente, porem, ele ler as 14 primeiras, eu queria ler as 14 ultimas, pois й para mostrar as ultimas coisas feitas, nao as primeiras( acho que entendeu ne ? rsrs), pois й, essa й minha duvida.
Obg desde jб !
Codigo:
stock Ler(name[], playerid) // << isso aki й pra ler o log , usei um " Ler(nada,playerid); " por exemplo
{
new nomes[1200];
new File:archive;
new Texto[1200];
new stop;
archive = fopen(name, io_read);
while(fread(archive, nomes))
{
stop++;
strcat(Texto, nomes, sizeof(nomes));
if(stop == 14) break;
}
ShowPlayerDialog(playerid, 9936, DIALOG_STYLE_LIST, "Logs",Texto,"Ok", "Cancelar");
fclose(archive);
}
Re: [Ajuda] Logs -
RiqueP - 20.08.2016
Uma dica, em vez de ir lб buscar o texto la no fundo do baъ. Faзa para cada inserзгo nova no log seja escrita na primeira linha.
Re: [Ajuda] Logs -
Andinho - 20.08.2016
Quote:
Originally Posted by RiqueP
Uma dica, em vez de ir lб buscar o texto la no fundo do baъ. Faзa para cada inserзгo nova no log seja escrita na primeira linha.
|
Otima dica, ja tentei procurar como faz isso mais nao encontrei, caso alguem possa explicar melhor, agradeзo bastante, e pra vocк muito obg, +rep.
Re: [Ajuda] Logs -
RiqueP - 20.08.2016
Quando for inserir uma nova mensagem inclua "\r\n" no final.
Exemplo:
PHP код:
fwrite (dir, "oi sou riquep\r\n");
Re: [Ajuda] Logs -
F1N4L - 20.08.2016
Quote:
Originally Posted by RiqueP
Uma dica, em vez de ir lб buscar o texto la no fundo do baъ. Faзa para cada inserзгo nova no log seja escrita na primeira linha.
|
Уtima ideia!
@topic
Fiz este cуdigo e ele й um pouco lento, mas eficiente. Faz basicamente o que @RiqueP postou: insere novas informaзхes na primeira linha do arquivo, assim vc lк as primeiras linhas.
Segue o cуdigo:
Код:
stock WriteLog(File_[], Log[])
{
if(!fexist(File_)) return false;
new Buf[300], BackUp[300], Format[128], File: LOG;
LOG = fopen(File_, io_read);
while(fread(LOG, Buf))
{
strcat(BackUp, Buf);
}
fclose(LOG);
LOG = fopen(File_, io_write);
format(Format, sizeof Format, "%s\r\n", Log);
fwrite(LOG, Format);
fclose(LOG);
LOG = fopen(File_, io_append);
fwrite(LOG, BackUp);
fclose(LOG);
return true;
}
Re: [Ajuda] Logs -
Andinho - 20.08.2016
Quote:
Originally Posted by F1N4L
Уtima ideia!
@topic
Fiz este cуdigo e ele й um pouco lento, mas eficiente. Faz basicamente o que @RiqueP postou: insere novas informaзхes na primeira linha do arquivo, assim vc lк as primeiras linhas.
Segue o cуdigo:
Код:
stock WriteLog(File_[], Log[])
{
if(!fexist(File_)) return false;
new Buf[300], BackUp[300], Format[128], File: LOG;
LOG = fopen(File_, io_read);
while(fread(LOG, Buf))
{
strcat(BackUp, Buf);
}
fclose(LOG);
LOG = fopen(File_, io_write);
format(Format, sizeof Format, "%s\r\n", Log);
fwrite(LOG, Format);
fclose(LOG);
LOG = fopen(File_, io_append);
fwrite(LOG, BackUp);
fclose(LOG);
return true;
}
|
Muito Bom mano ^^ nao tinha penssado nessa possibilidade, fazer um packup de tudo, escrever uma linha, e locar o packup denovo, muito obg, resolveu meus problemas rsrs +rep
Re: Logs -
Dayvison_ - 21.08.2016
Olha, isto й querer reinventar a roda, a funзгo do FIN4L й funcional enquanto o arquivo for pequeno, quando ele passar de 10 linhas exigira muito mais, e assim por diante...
1 - Use fread, para contar os caracteres(somando o retorno), depois ultilize fseek a partir das ultimas linhas que desejar.(Porйm nгo vejo isto sendo feito sem uma array infinita...)
2 - Ultilize fread duas vezes, uma para contar o numero de linhas, e a segunda para ler a partir das linhas finais agora que vocк tem o numero total.
Re: Logs -
Andinho - 21.08.2016
Quote:
Originally Posted by Day_
Olha, isto й querer reinventar a roda, a funзгo do FIN4L й funcional enquanto o arquivo for pequeno, quando ele passar de 10 linhas exigira muito mais, e assim por diante...
1 - Use fread, para contar os caracteres(somando o retorno), depois ultilize fseek a partir das ultimas linhas que desejar.(Porйm nгo vejo isto sendo feito sem uma array infinita...)
2 - Ultilize fread duas vezes, uma para contar o numero de linhas, e a segunda para ler a partir das linhas finais agora que vocк tem o numero total.
|
exatamete como vocк falou, eu sу estou usando 14 linhas, porem, passou por minha cabeзa criar o dialog estilo menssagem mesmo, com paginas.. mais por enquanto vou deixar como estar, depois estudo essas funзхes melhor, obg pela dica amigo.