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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 31 окт 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
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 31 окт 2011, 20:18

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 31 окт 2011, 20:23

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 31 окт 2011, 20:40

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 31 окт 2011, 20:46

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 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
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 2011, 18:16

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 2011, 18:25

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 2011, 18:29

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 2011, 18:35

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 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
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 2011, 18:47

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 2011, 18:57

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 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
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 2011, 19:06

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 2011, 19:08

Нету.

Аватара пользователя
vlad
Супермодератор
Супермодератор
Сообщения: 233
Зарегистрирован: 02 фев 2012, 11:42

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

Сообщение vlad » 12 ноя 2011, 19:14

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

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

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

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Maximus » 12 ноя 2011, 19:16

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

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

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

Сообщение Andrey » 12 ноя 2011, 19:16

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

Аватара пользователя
vlad
Супермодератор
Супермодератор
Сообщения: 233
Зарегистрирован: 02 фев 2012, 11:42

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

Сообщение vlad » 12 ноя 2011, 19:20

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

Ответить