[Ajuda] Logs
#1

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);
}
Reply
#2

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.
Reply
#3

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.
Reply
#4

Quando for inserir uma nova mensagem inclua "\r\n" no final.

Exemplo:
PHP код:
fwrite (dir"oi sou riquep\r\n"); 
Reply
#5

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;
}
Reply
#6

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
Reply
#7

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.
Reply
#8

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)