SA-MP Forums Archive
Удаление определенного ника из файла. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Удаление определенного ника из файла. (/showthread.php?tid=311750)



Удаление определенного ника из файла. - Xa0s - 18.01.2012

Создал диалоговое окно которое при введение любого символа ищет совпадения среди ников в файле и выдает их в диалоговом окне (LIST). Затем нажимая на нужного игрока он должен удаляться
Все это работает, но я не могу подобрать функцию, которая бы удаляла строку с ником из файла.
Я бы использовал конечно и эту функцию
PHP Code:
stock xDeleteLineFromFilefile[], line )
{
    if(
line 0) return false;
    new 
tmpfile[140];
    
format(tmpfilesizeof(tmpfile), "%s.tmp"file);
    
fcopytextfile(filetmpfile);
    new 
CurrLine,
        
File:FileFrom     fopen(tmpfileio_read),
        
File:FileTo        fopen(fileio_write);
    new 
tmpstring[200];
    if(
CurrLine != line)
    {
        while(
CurrLine != line)
        {
            
fread(FileFromtmpstring);
            
fwrite(FileTotmpstring);
            
CurrLine ++;
        }
    }
    
fread(FileFromtmpstring);
    while(
fread(FileFromtmpstring))
    {
        
fwrite(FileTotmpstring);
    }
    
fclose(FileTo);
    
fclose(FileFrom);
    
fremove(tmpfile);
    return 
true;

(Узнает какая это строка в диалоговом окне и удаляет ее из файла т.е. использует нумерацию)
Но как вы поняли из описания эту функцию не получиться использовать
Вот сам диалог.
PHP Code:
    if(dialogid == 1251)
    {
        if(!
response)return 0;
        new 
filename[128],str[256];
        
strmid(filenameinputtext0strlen(inputtext)-1150);
        
format(str,8133"Èãðîê %s ðàçáàíåí",filename);
        
SendClientMessage(playerid,OFF_COLOR,str);
    } 
Подскажите какой функцией можно удалить или без ключа такое удаление не произвести?


Re: Удаление определенного ника из файла. - Xa0s - 18.01.2012

Подумал что может так нормально будет, но все равно не удаляет что не правильно сделал
PHP Code:
    if(dialogid == 1251)
    {
        if(!
response)return 0;
        new 
filename[128],str[256],strd[2048],detec[256];
        
strmid(filenameinputtext0strlen(inputtext)-1150);
        
format(str,8133"Игрок %s разбанен",filename);
        
SendClientMessage(playerid,OFF_COLOR,str);
        new 
File:file fopen("Xa0sAC/BanLog.ini",io_read);
        while(
fread(file,detec,sizeof(detec)))
          {
            if (!
strfind(detec,filenametrue) != -1)
            {
                
format(strd,sizeof(strd),"%s\r\n%s",strd,detec);
            }
        }
        
fclose(file);
        new 
File:file2 fopen("Xa0sAC/BanLog.ini",io_write);
        
fwrite(file2,strd);
        
fclose(file2);
    } 



Re: Удаление определенного ника из файла. - xJester - 18.01.2012

Принцип:
Грузим все из файла в память -> Выкидываем из памяти все лишнее -> Перезаписываем остатки из памяти в файл (чистый)


Re: Удаление определенного ника из файла. - Stepashka - 18.01.2012

pawn Code:
if (!strfind(detec,filename, true) != -1)
ты себе как это представляешь?
После ! вернется или true или false интересно которая из этих условий равно -1?!

Наверно стоит сделать так:
pawn Code:
if(dialogid == 1251)
{
    if (!response) return 0;
    new newContent[2048], fileString[256];
    strdel(inputtext, strlen(inputtext)-1, strlen(inputtext));
    format(fileString, sizeof(fileString), "Игрок %s разбанен", inputtext);
    SendClientMessage(playerid, OFF_COLOR, fileString);
    new File:file = fopen("Xa0sAC/BanLog.ini", io_read);
    while (fread(file, fileString, sizeof(newContent))))
    {
        if (strfind(fileString, inputtext, true) == -1)
        {
            strcat(newContent, fileString, sizeof(newContent));
        }
    }
    fclose(file);
    file = fopen("Xa0sAC/BanLog.ini", io_write);
    fwrite(file,newContent);
    fclose(file);
}



Re: Удаление определенного ника из файла. - Stepashka - 18.01.2012

Quote:
Originally Posted by xJester
View Post
Принцип:
Грузим все из файла в память -> Выкидываем из памяти все лишнее -> Перезаписываем остатки из памяти в файл (чистый)
и получаем необходимость создания огромного многомерного массива, при том мы не знаем на какое количество ячеек потребуется массив


Re: Удаление определенного ника из файла. - EvgeN 1137 - 18.01.2012

Quote:

при том мы не знаем на какое количество ячеек потребуется массив

используем плагин динамических массивов


Re: Удаление определенного ника из файла. - xJester - 18.01.2012

(: ладно убедил... используем property :P


Re: Удаление определенного ника из файла. - Stepashka - 18.01.2012

Quote:
Originally Posted by EvgeN 1137
View Post
используем плагин динамических массивов
Quote:
Originally Posted by xJester
View Post
(: ладно убедил... используем property :P
в армию вам ребята надо, в стройбат, чтобы дали вам ломы и заставили копать от столовой и до обеда!
Может тогда научитесь использовать инструменты по назначению!

На будущее: используем БД и не компостируем себе мозг.


Re: Удаление определенного ника из файла. - Xa0s - 18.01.2012

Quote:
Originally Posted by Stepashka
View Post
pawn Code:
if (!strfind(detec,filename, true) != -1)
ты себе как это представляешь?
После ! вернется или true или false интересно которая из этих условий равно -1?!
}[/pawn]
ступил. Ка бэ не знаю как правильно использовать в этом коде.


Re: Удаление определенного ника из файла. - ZiGGi - 19.01.2012

Quote:
Originally Posted by Stepashka
View Post
и получаем необходимость создания огромного многомерного массива, при том мы не знаем на какое количество ячеек потребуется массив
Для такого случая можно создать временный файл, записать туда то, что нужно из старого файла, удалить старый файл и в новый, с именем старого, записать всё из временного. Геморно, но как вариант.