Advertisement
DraKiNs

[INC] Set/Get Line on File

Aug 28th, 2011
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.15 KB | None | 0 0
  1. /*
  2.  * Author: Bruno da Silva
  3.  * www.ips-team.blogspot.com
  4.  * Set and Get line of File
  5. */
  6.  
  7. #if !defined INVALID_LINE_ID
  8.     #define INVALID_LINE_ID ~0xff
  9. #endif
  10.  
  11. #if !defined MAX_LINE
  12.     #define MAX_LINE 64
  13. #endif
  14.  
  15.  
  16. getLine(player[], line)
  17. {
  18.     // declarar variáveis a ser usadas no código
  19.     new
  20.         linhaAtual,
  21.         string[MAX_LINE],
  22.         File:arquivo = fopen(player, io_read)
  23.     ;
  24.  
  25.     // ler linhas do arquivo, caso linha atual for igual a line, para loop
  26.     while(fread(arquivo, string))
  27.     {
  28.         if(linhaAtual == line) break;
  29.         ++linhaAtual;
  30.     }
  31.  
  32.     if(linhaAtual != line) return string[0] = EOS, string;
  33.  
  34.     fclose(arquivo);
  35.     // retornar linha obtida
  36.     return string[strlen(string)-2] = EOS, string;
  37. }
  38.  
  39. setLine(player[], line, buffer[])
  40. {
  41.     // declarar variáveis a ser usadas no código
  42.     new
  43.         linhaAtual = -1,
  44.         data[MAX_LINE],
  45.         string[MAX_LINE],
  46.         bool: encontrouLinha;
  47.  
  48.     // formatar futura linha para dar quebra de linha
  49.     format(data, MAX_LINE, #%s\r\n, buffer);
  50.  
  51.     // caso arquivo não existir, cria-lo com a nova linha
  52.     if (!fexist(player))
  53.     {
  54.         new File: arquivoOrigem = fopen(player, io_write);
  55.  
  56.         fwrite(arquivoOrigem, data);
  57.         return fclose(arquivoOrigem);
  58.     }
  59.  
  60.     // passar todo arquivo original para o temporario, tirando a linha para retirar
  61.     new File: arquivoOrigem = fopen(player, io_read);
  62.     new File: arquivoTemporario = fopen("tmpfile.tmp", io_write);
  63.  
  64.     while (fread(arquivoOrigem, string))
  65.     {
  66.         if (++linhaAtual != line)
  67.         {
  68.             fwrite(arquivoTemporario, string);
  69.         }
  70.         else
  71.         {
  72.             encontrouLinha = true;
  73.             fwrite(arquivoTemporario, data);
  74.         }
  75.     }
  76.  
  77.     fclose(arquivoOrigem);
  78.     fclose(arquivoTemporario);
  79.  
  80.     // caso não encontrar a linha, escrever nova linha no arquivo
  81.     if (!encontrouLinha)
  82.     {
  83.         arquivoOrigem = fopen(player, io_append);
  84.         fwrite(arquivoOrigem, data);
  85.         return fclose(arquivoOrigem);
  86.     }
  87.  
  88.     // pegar do arquivo temporario para arquivo original
  89.     arquivoOrigem = fopen(player, io_write);
  90.     arquivoTemporario = fopen("tmpfile.tmp", io_read);
  91.  
  92.     while (fread(arquivoTemporario, string))
  93.     {
  94.         fwrite(arquivoOrigem, string);
  95.     }
  96.  
  97.     fclose(arquivoOrigem);
  98.     fclose(arquivoTemporario);
  99.  
  100.     return fremove("tmpfile.tmp");
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement