Удаление определенного ника из файла.
#1

Создал диалоговое окно которое при введение любого символа ищет совпадения среди ников в файле и выдает их в диалоговом окне (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);
    } 
Подскажите какой функцией можно удалить или без ключа такое удаление не произвести?
Reply
#2

Подумал что может так нормально будет, но все равно не удаляет что не правильно сделал
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);
    } 
Reply
#3

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

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

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

Quote:

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

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

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

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

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

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

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


Forum Jump:


Users browsing this thread: 1 Guest(s)