На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> Exit code=103 , Где ошибка?
    ExpandedWrap disabled
      Program GamersCreate;
       
      Uses Crt;
       
      Type AlliansGamers = Record
                           Nik : string[25];
                           x,y : array[1..15] of Byte;
                           end;
       
      Var SIn,Sn,Sx,Sy : String;
          FIn : Text;
          FOut : file of AlliansGamers;
          AV : AlliansGamers;
          step,j,ni,Code : Integer;
          
      Begin
      ClrScr;
      Write(' Введите название файла (без расширения): ');
      ReadLn(SIn);
      Assign(FIn,SIn+'.txt');
      Reset(FIn);
      Assign(FOut,SIn+'.als');
      ReWrite(FOut);
      step:=1;
      Repeat
      Case step of
      1 : begin
          If Not Eof(FIn) then begin
                               Close(FIn);
                               Close(FOut);
                               end
                          else begin
                               ReadLn(FIn,SIn);
                               step:=2;
                               end;
          end;
      2 : begin
          For j:=1 to 15 do begin
                            AV.x[j]:=0;
                            AV.y[j]:=0;
                            end;
          j:=0;
          ni:=Pos('#',SIn);
          If ni=0 then step:=1
                  else begin
                       Inc(ni);
                       step:=3;
                       end;
          end;
      3 : begin
          If SIn[ni]=' ' then If SIn[ni+1]=' ' then begin
                                                    step:=5;
                                                    AV.Nik:=Sn;
                                                    end
                                                    else step:=4
                         else step:=4;
          end;
      4 : begin
          Sn:=Sn+SIn[ni];
          Inc(ni);
          step:=3;
          end;
      5 : begin
          If Not Eof(FIn) then begin
                               Close(FIn);
                               Close(FOut);
                               end
                  else begin
                               Sx:='';
                               Sy:='';
                               ReadLn(FIn);
                               ni:=Pos('[',SIn);
                               If ni=0 then If (Pos('#',SIn)>0) then begin
                                                                     Write(FOut,AV);
                                                                     step:=2;
                                                                     end
                                                                else step:=5
                                       else begin
                                            Inc(ni);
                                            step:=6;
                                            end;
                               end;
          end;
      6 : begin
          If SIn[ni]=':' then begin
                              Inc(ni);
                              step:=7;
                              end
                         else begin
                              Sx:=Sx+SIn[ni];
                              Inc(ni);
                              step:=6;
                              end;
          end;
      7 : begin
          If SIn[ni]=']' then begin
                              Inc(j);
                              Val(Sx,AV.x[j],Code);
                              Val(Sy,AV.y[j],Code);
                              step:=5;
                              end
                              else begin
                              Sy:=Sy+SIn[ni];
                              Inc(ni);
                              step:=7;
                              end;
          end;
      end;
      Until False;
      End.



    Программа компилируется, запускается. Сразу после ввода имени файла программа вылетает, IDE показывает ошибку 103. Что не так в программе?

    Нашел текст ошибки:
    103 File not open Reported by the following functions : Close, Read, Write, Seek, EOf,
    FilePos, FileSize, Flush, BlockRead, and BlockWrite if the file is not open.

    Но не могу понять где и почему происходит ошибка.

    ОС: Windows XP
    IDE: FPC 2.2.2
      Цитата Polinom2686 @
      Но не могу понять где и почему происходит ошибка.
      Файл с введенным_именем.TXT в текущей папке присутствует? Тогда присоедини его тоже сюда (в архиве, чтоб можно было посмотреть, где именно у тебя вылетает программа). У меня с пустым файлом она просто зависает, а не вылетает.
        Программа должна разобрать этот файл.

        Добавлено
        Вообще задача такая: в файле находится список альянса, который содержит ник игрока и название его городов и координат островов. Надо разобрать этот файл, т.е. вытащить из него ники игроков и координаты островов для каждого игрока, и сохранить данные в типизированный файл.
        Прикреплённый файлПрикреплённый файл1.zip (15.65 Кбайт, скачиваний: 236)
          Методика построения программы взята отсюда http://zeus.sai.msu.ru:7000/programming/theory/formal.shtml
            Ошибка здесь:
            ExpandedWrap disabled
              Repeat
              Case step of
              1 : begin
                  If Not Eof(FIn) then begin
                                       Close(FIn); // <---
                                       Close(FOut);
                                       end
              ...

            Смотри: ты при первом заходе в Case имеешь step = 1, конец файла НЕ достигнут, и ты файл закрыл... Что дальше? Что изменилось? Ничего, step все так же = 1, файл закрыт, попытка применить EOF к закрытому файлу приводит к тому, что ты видишь... Там точно нужен NOT?
              Спасибо, я сейчас посмотрю у себя в алгоритме.

              Добавлено
              Да, действительно Not лишний.
              Спасибо. +1
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0325 ]   [ 16 queries used ]   [ Generated: 22.06.25, 11:29 GMT ]