Плагин для CommFort (Delphi)

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #321 Maximus » 31.10.2011, 20:10

к - счётчик, проверяем каждый раз не превышает ли кол-во очков игрока кол-ва для получения ранга. Скажем если у него 0 ранг и очков больше 20 но меньше 30, то по идее на индексе к=2 цикл должен остановиться.
R[1].Ball = 10
R[2].Ball = 20
R[3].Ball = 30

А кажется понял, нужно S[j].Rang := S[j].Rang + k; не внутри цикла делать, а после него, а так получается он несколько раз срабатывает и ранг игрока постоянно уходит вперёд.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #322 Andrey » 31.10.2011, 20:18

Да, это не внутри цикла надо вписать или просто поставить break после строки

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #323 Maximus » 31.10.2011, 20:23

Если break делать тогда возможна такая ситуация, у игрока 30 баллов, а проверка пройдёт только раз и выдаст ему первый ранг.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #324 Andrey » 31.10.2011, 20:40

Попробую расписать по шагам, что-то пока не совсем понимаю.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #325 Andrey » 31.10.2011, 20:46

Из-за усталости думать пока тяжело, но есть предположение (если всё же правильно понял код): не надо в цикле записывать что-то в S[j].Rang. Лучше завести переменную в которой будет храниться это значение до выхода из цикла и потом присвоить это значение элементу S[j].Rang. А то в данный момент например при 29 очках второй ранг вообще не проверяется

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #326 Maximus » 12.11.2011, 18:12

Нужно удалить слово из базы, сдвинуть следующие за ним слова и уменьшить размер массива. В результате этих действий

Код: Выделить всё

                for i:=q to length(MasA)-2 do MasA[i] := MasA[i+1];
                SetLength(MasA, length(MasA)-1);
                AssignFile(myFile,Papka+'\Plugins\??????\city_bigbase.txt');
                Rewrite(myFile);
                for i:=0 to length(MasA)-1 do Writeln(myFile, MasA[i]);
                CloseFile(myFile);

получается что вместо удалённого слова появляется пустая строка, при удалении следующего слова вторая пустая строка не появляется, но первая так и остаётся. Никак не могу понять откуда она. q - это позиция удаляемого слова в массиве.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #327 Andrey » 12.11.2011, 18:16

q точно правильное?
Не вижу никаких ошибок в коде

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #328 Maximus » 12.11.2011, 18:25

Точно, проверял, выводил значение массива в индексе q оно совпадает с нужным словом и выводил процесс замены, там тоже всё верно - на место удаляемого копируется следующее. Замечу, что когда массив заполнял с первого элемента, то этот пробел появлялся в самом начале файла, после того как сделал заполнение массива с нулевого элемента этот пробел стал появляться на месте удаляемого слова.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #329 Andrey » 12.11.2011, 18:29

Получается что при удалении первого слова оно заменяется пробелом а остальные не сдвигаются?
Или оно удаляется, слова сдвигаются, но вместо того слова которое теперь должно стоять на месте q получается пробел?

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #330 Maximus » 12.11.2011, 18:35

Если удалять первое слово в базе, то пробелы появляются в конце, причём два.
-----------------------
Даже три.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #331 Andrey » 12.11.2011, 18:43

Попробую посмотреть на delphi, но если просто подумать то всё правильно.
Предположим что MasA='qqq','www','eee','rrr','ttt','yyy';
Удаляем первое слово, значит q=0
После прохождения цикла должно получиться MasA='www','eee','rrr','ttt','yyy','yyy';
А после сокращения размера массива MasA='www','eee','rrr','ttt','yyy';

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #332 Maximus » 12.11.2011, 18:47

Это в теории, а на практике ерись какая-то получается :D

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #333 Andrey » 12.11.2011, 18:57

Не могу воспроизвести проблему в delphi. Сохранение в файл не смотрел, но проблема не с записью в файл

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #334 Maximus » 12.11.2011, 18:58

Вот если так базу загружать

Код: Выделить всё

SetLength(MasA, 1);
      AssignFile(myFile,Papka+'\Plugins\??????\city_bigbase.txt');
      Reset(myFile);
      while not Eof(myFile) do begin
        ReadLn(myFile, tempString);
        SetLength(MasA, length(MasA)+1);
        MasA[length(MasA)-1]:=tempString;
      end;
      CloseFile(myFile);

то при удалении первого слова пробел появляется в конце и в начале. А если так

Код: Выделить всё

SetLength(MasA, 1);
      AssignFile(myFile,Papka+'\Plugins\??????\city_bigbase.txt');
      Reset(myFile);
      while not Eof(myFile) do begin
        ReadLn(myFile, tempString);
        MasA[length(MasA)-1]:=tempString;
        SetLength(MasA, length(MasA)+1);
      end;
      CloseFile(myFile);

то при удалении первого слова появляется три пробела в конце.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #335 Andrey » 12.11.2011, 19:06

Первое не совсем правильно, в таком случае надо перед загрузкой длину массива делать 0, а не 1.
Во втором случае всё правильно и причина появления пробелов для меня непонятна. В самой базе нет пробелов?

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #336 Maximus » 12.11.2011, 19:08

Нету.

vlad M
Супермодератор
Супермодератор
Аватара
vlad M
Супермодератор
Супермодератор
Репутация: 0
Сообщения: 233
С нами: 6 лет 9 месяцев

Re: Плагин для CommFort (Delphi)

Сообщение #337 vlad » 12.11.2011, 19:14

В этой строке ошибка:

Код: Выделить всё

MasA[length(MasA)-1]:=tempString;

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: Плагин для CommFort (Delphi)

Сообщение #338 Maximus » 12.11.2011, 19:16

vlad, и в чём ошибка?

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: Плагин для CommFort (Delphi)

Сообщение #339 Andrey » 12.11.2011, 19:16

vlad, где конкретно? Не вижу никакой ошибки, здесь присваивается последнему элементу динамического массива MasA значение tempString.

vlad M
Супермодератор
Супермодератор
Аватара
vlad M
Супермодератор
Супермодератор
Репутация: 0
Сообщения: 233
С нами: 6 лет 9 месяцев

Re: Плагин для CommFort (Delphi)

Сообщение #340 vlad » 12.11.2011, 19:20

Не путайте delphi и php. В delphi массивы начинаются с 1 и соответственно вычитать 1 не надо


Вернуться в «Delphi/Pascal»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя