Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 14:18   #1
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию Зациклилось...

ПОмогите заставить программу выйти из цикла. Голова уже не варит....
Сама прога в архиве
Вложения
Тип файла: zip Новая сжатая ZIP-папка.zip (254.7 Кб, 6 просмотров)
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 03.12.2011, 14:27   #2
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

циклится эта функция...предположительно
Код:
function XSearch(StrSearch: string):string;
var
  c: char;
  b: byte;
  FindT,
  FindText: string;
begin
if Form1.ChangeQ.ItemIndex=-1 then
  Form1.ChangeQ.ItemIndex:=0;
reset(MainFile);
FindText:='';
repeat
read(MainFile, c);
if Length(FindText)<Length(IntToStr(Form1.ChangeQ.ItemIndex+2)) then
  begin
  FindText:=FindText+c;
  end
else
  begin
  Delete(FindText, 1, 1);
  FindText:=FindText+c;
  end;
until FindText='Q'+IntToStr(Form1.ChangeQ.ItemIndex+1)+';';
b:=Length(StrSearch);
FindText:='';
FindT:='';
repeat
read(MainFile, c);
if Length(FindText)<b then
    FindText:=FindText+c
else
  begin
  Delete(FindText, 1, 1);
  FindText:=FindText+c;
  end;
until (c=#26)or(FindText=StrSearch);
if StrSearch=FindText then
  repeat
    read(MainFile, c);
    if (c<>#13)and(c<>#10)and(c<>';') then
        FindT:=FindT+c
    else
      if c=#13 then FindT:=FindT+#13;
  until (c=';')or(c=#26);
CloseFile(MainFile);
XSearch:=FindT;
end;
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 03.12.2011, 14:37   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Я в этом уверен.
Вся проблема - человеческий фактор.

например это:
Код:
repeat
read(MainFile, c);
if Length(FindText)<Length(IntToStr(Form1.ChangeQ.ItemIndex+2)) then
  begin
  FindText:=FindText+c;
  end
else
  begin
  Delete(FindText, 1, 1);
  FindText:=FindText+c;
  end;
until FindText='Q'+IntToStr(Form1.ChangeQ.ItemIndex+1)+';';
стоит вам поставить q вместо Q и программа повиснет. Пересмотрите хранение вопросов. И по меньше циклов.
А как альтернатива, перведите весь файл в нижний регистр(все буквы маленькие).

Я бы сделал все через Record и file of Record, при запуске считал файл и забил на него. Все.
Без заморочек с txt, темболее что любой может открыть и понять какие ответу нужно давать на тест.
Человек_Борща вне форума Ответить с цитированием
Старый 03.12.2011, 14:49   #4
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

спасибоо... я так и сделаю - все переведу в нижний регистр... а про файл - его я запихну куда по дальше. У них не будет времени его искать.
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц