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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 08:17   #1
victor5133
Форумчанин
 
Регистрация: 05.10.2010
Сообщений: 107
По умолчанию Файловый ввод\вывод. Зависает программа, а ошибки не выдает.

Здравствуйте, суть программы в том что она должна из файла считывать строки и в строке найти S21STR= или S21ALL= и считать все символы до знака & и вывести в файл. Она запускается начинает считывать а потом зависает, на одном и том же месте. Подскажите в чем проблема. Вот код

Код:
while not EOF(log) do
begin
for p:=0 to length(str)-7 do
 begin
 prom_str:=copy(str,p,7);
 if (prom_str='S21STR=') or (prom_str='S21ALL=') then
   begin
   k:=p+7;
   prom_str:=copy(str,k,1);
   if prom_str<>'&' then
      begin
      while prom_str<>'&' do 
        begin 
        mas_dat[j]:=mas_dat[j]+prom_str; 
        k:=k+1; 
        prom_str:=copy(str,k,1); 
        end;
      writeln(prom,mas_dat[j]);
      j:=j+1;
      end;
   end;

 end;
readln(log,str);
end;

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.04.2012 в 08:21.
victor5133 вне форума Ответить с цитированием
Старый 16.04.2012, 08:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, у Вас вывернуто чтение из файла (я так понимаю, что до строчки while not EOF(log) do идёт Readln(log, str), но этого не видно, да и неправильно так.
нужно
Код:
while not EOF(log) do 
begin
    readln(log,str);

    ... а тут обработка прочитанной строки ....

end;
во-вторых, зачем Вы ходите циклами по строке, выбираете из строки кусочки и сравниваете их с нужными значениями?
Вы про функцию POS() что-нибудь слышали?!

в-третьих, я Ваш код не прогонял, но я на 99% уверен, что ошибка у Вас в этом цикле:
Цитата:
Код:
        while prom_str<>'&' do 
        begin 
          mas_dat[j]:=mas_dat[j]+prom_str; 
          k:=k+1; 
          prom_str:=copy(str,k,1); 
        end;
подумайте, сколько раз будет выполняться цикл, если в строке НЕТ символа '&'
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2012, 08:57   #3
victor5133
Форумчанин
 
Регистрация: 05.10.2010
Сообщений: 107
По умолчанию

ага, понял. Спасибо!
victor5133 вне форума Ответить с цитированием
Старый 16.04.2012, 09:02   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

А ещё неплохо почитать про отладку и точки останова - здорово облегчает жизнь в таких случаях. Ошибки находятся быстрее, чем код выкладывается на форум.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файловый ввод-вывод vovik4385 Общие вопросы C/C++ 4 29.03.2012 18:22
Файловый ввод\вывод ВаликАматор Общие вопросы C/C++ 0 27.02.2011 11:08
Файловый ввод-вывод Кристюня Общие вопросы C/C++ 9 29.11.2010 20:02
Файловый ввод вывод GrihaI Общие вопросы C/C++ 4 31.05.2010 02:45
файловый ввод/вывод kot111 Общие вопросы C/C++ 1 04.02.2008 17:45