[AJUDA] Nгo Escreve no .Txt
#1

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

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

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

Alguem ??
Reply
#5

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

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

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


Forum Jump:


Users browsing this thread: 3 Guest(s)