[AJUDA] Nгo Escreve no .Txt -
telmo_ferreira - 14.11.2011
Alguem ajuda !
se o file nao existir ele cria, mas nao escreve nada lб dentro.
Код:
no inicio #define FILE_NAME "log/gravardata.txt"
public gravardata(playerid)
{
new File:gstats;
new string[256];
new pname[24];
new str[256];
new ccurdate = getdate();
gstats=fopen(FILE_NAME, io_append);
GetPlayerName(playerid, pname, 24);
format(str, 30, "%s %d \n\r",pname,ccurdate);
if(!gstats) { fcreate(FILE_NAME); }
while(fread(gstats, string))
{
if(strcmp(string, pname, false, strlen(pname))==0)
{
fdeleteline(FILE_NAME, string);
fwrite(gstats, str);
}
else if(strcmp(string, pname, false, strlen(pname))!=0) {
fwrite(gstats, str);
}
}
fclose(gstats);
return 1;
}
Obrigado
Re: [AJUDA] Nгo Escreve no .Txt -
Lуs - 14.11.2011
Use meu sistema de logs, й mais fбcil de entender, ele jб escreve com hora.
pawn Код:
CriarLog("Nome do seu log.txt");
EscreverLog("Nome do seu log.txt", "Seu texto");
Vai sair assim:
(Dia/Mes/Ano)[Hora:Minuto:Segundo] Seu texto
Qualquer problema me avise.
[Include] Logs Dinвmicos! [Losgs]
Re: [AJUDA] Nгo Escreve no .Txt -
telmo_ferreira - 14.11.2011
Antes de mais muito obrigado !
o cуdigo que eu meti ainda vai ser alterado,sу meti assim para nгo complicar tanto.
mas o que pretendo com isso й registar a data da ultima entrada do player! quando ele voltar a entrar o server busca no log o nome dele e mete a nova data.
Acho que o cуdigo que coloquei esta mais ou menos correcto sу nao estб й escrevendo nada ..
Re: [AJUDA] Nгo Escreve no .Txt -
telmo_ferreira - 14.11.2011
Alguem ??
Re: [AJUDA] Nгo Escreve no .Txt - rjjj - 14.11.2011
Isto deve resolver o seu problema
.
Deve-se direcionar ao segundo parвmetro de
fopen o valor
io_write sempre quando se quiser escrever no arquivo trocando o que estб nele pelo que vocк quer registrar
.
Seu cуdigo, com a funзгo de apenas escrever, ficaria assim:
pawn Код:
public gravardata(playerid)
{
new File:gstats;
new string[256];
new pname[24];
new str[256];
new ccurdate = getdate();
GetPlayerName(playerid, pname, 24);
format(str, 30, "%s %d",pname,ccurdate);
gstats=fopen(FILE_NAME, io_write);
fwrite(gstats, str);
fclose(gstats);
return 1;
}
Para fazer a leitura, basta aplicar um
fread simples:
https://sampwiki.blast.hk/wiki/Fread
E usar, para capturar os valores da string pega do arquivo, o plugin
sscanf ou um delimitador (caractere para atuar como refencial em funзхes como
strdel).
Espero ter ajudado
.
Re: [AJUDA] Nгo Escreve no .Txt -
telmo_ferreira - 15.11.2011
Obrigado pela resposta!!!
Apenas a escrever no .txt jб eu tinha conseguido fazer, a procurar dentro do file e substituir a data й que estou farto de dar voltas e nгo consigo fazer nada!
Re: [AJUDA] Nгo Escreve no .Txt -
telmo_ferreira - 16.11.2011
Boas!
Estб quase resolvido uma ultima duvida!
O server esta a salvar assim no ficheiro .txt :
Casa Nє3 Data: 2011.11.16
<br>
Casa Nє4 Data: 2011.11.16
<br>
Casa Nє31 Data: 2011.11.16
<br>
Casa Nє45 Data: 2011.11.16
<br>
Casa Nє16 Data: 2011.11.16
<br>
Casa Nє24 Data: 2011.11.16
<br>
etc..
Agora por exemplo:
se entrar o dono da casa 31 o server apaga essa linha e volta a escrever a nova linha com a data recente.
O problema й que se entra o dono da casa 4 apaga a linha da casa 4 e a linha da casa 40,41,42,43,etc..
assim como se entra o dono da casa 2 apaga a linha da casa 2 mais as linhas 20,21,21,etc..
Existe alguma forma de contornar isso ??
Код:
public actualizardata(playerid)
{
if(PlayerInfo[playerid][pPhousekey] == 255)//nгo tem casa
{
return 1;
}
new chave;
new str[128];
new File:gstats;
new day,month,year;
getdate(day,month,year);
chave = PlayerInfo[playerid][pPhousekey];
format(str, sizeof(str), "Casa Nє%d",chave);
fdeleteline("log/gravardata.txt",str);
new sstr[128];
format(sstr, sizeof(sstr), "Casa Nє%d Data: %d.%d.%d \r<br>\n",chave,day,month,year);
gstats=fopen("log/gravardata.txt", io_append);
fwrite(gstats, sstr);
fclose(gstats);
return 1;
}
stock fdeleteline(filename[], removed[])
{
new string[64], str[32], File:handle, File:ftmp;
handle = fopen(filename,io_read);
format(str,sizeof(str),"%s.part",filename);
ftmp = fopen(str,io_write);
while(fread(handle,string))
if(strfind(string,removed) == -1)
fwrite(ftmp,string);
fclose(handle);
fclose(ftmp);
handle = fopen(filename,io_write);
ftmp = fopen(str,io_read);
while(fread(ftmp,string))
fwrite(handle,string);
fclose(handle);
fclose(ftmp);
return fremove(str);
}