Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Посмотрите пожалуйста свежим взглядом!


pathfinder ©   (2005-09-02 21:24:00) 

Что-то ему не нравится в цикле repeat..until Вылезает ошибка "Access violation at adress..."
procedure TForm1.Button1Click(Sender: TObject);
var
St:TStringList;
i, c, n, n1, n2:integer;
S:string;
begin
St:=TStringList.Create;
 if opendialog1.Execute then
  begin
   St.LoadFromFile(opendialog1.FileName);
   for i:=0 to St.Count-1 do
    begin
     S:=St.strings[i];
      if (S[897]='/') and (S[900]='/') then  
       begin
        //begin
         for n:=898 to 922 do
          begin
           S[n-1]:=S[n];
          end;
        //end;

        if (S[897]='M') and (S[899]='/') and (S[916]<>' ') then  
         begin
          for n1:=899 to 922 do
           begin
            S[n1-2]:=S[n1];
           end;
         end;

        if (S[897]='/') and (S[916]<>' ') then
         begin
          S[899]:='.';
          c:=900;
          repeat
          S[c]:=S[c+1];
          c:=c+1;
          until (S[900]='/');
         end;

       end;
     St.Strings[i]:=S;
    end;
  end;
St.SaveToFile('out.txt');
end;

end.


Alexander Panov   (2005-09-02 22:22:00) [1]

pathfinder   (02.09.05 22:20) [8]

Я думаю, что тебе просто нужно посмотреть свежим;) на функции Copy, Pos


pathfinder   (2005-09-02 22:20:00) [2]

Спасибо! Разобрался наконец таки)


Alexander Panov   (2005-09-02 22:14:00) [3]

Alexander Panov ©   (02.09.05 22:13) [6]
Length(s1)-1);

Это не обязательно, можно просто 10000


Alexander Panov   (2005-09-02 22:13:00) [4]

Для каждой строки в цикле по списку строк:

s := List[i];
s1 := Copy(List[i],901,10000);
n := Pos('/',s1);
if n>0
  then List[i] := Copy(s,1,900)+Copy(s1,n,Length(s1)-1);
  else List[i] := Copy(s,1,900);
end;


pathfinder   (2005-09-02 22:06:00) [5]


> Eraser ©  


> Почему бы сразу не сказать ГДЕ конкретно в цикле вылетает
> ошибка...?

если бы я знал..просто без этого цикла ее нет

> Вообще код, мягко говоря, неуниверсальный )

а кто говорит, что это супер-код?)


> Alexander Panov ©


> 1. Отоформатируй как следует код - уважай тех, кто может
> помочь тебе.

старался как мог..простите, если что не так.


pathfinder   (2005-09-02 22:03:00) [6]


> begin...end ©

Цикл для того, чтобы сдвигать символы начиная с 901 позиции на одну позицию влево до тех пор пока в поз. 900 не будет символа "/". Но почему-то не работает(


begin...end   (2005-09-02 21:55:00) [7]

> pathfinder   (02.09.05 21:24)

> c:=900;
> repeat
> S[c]:=S[c+1];
> c:=c+1;
> until (S[900]='/');

Посмотрел свежим взглядом. Не понял, зачем здесь цикл. Он будет либо продолжаться до первого исключения из-за выхода за границы строки, либо выполнится один раз.


Alexander Panov   (2005-09-02 21:40:00) [8]

1. Отоформатируй как следует код - уважай тех, кто может помочь тебе.
2. Заметь, что строка может быть короче, чем (S[897]='/') and (S[900]='/')

Такие вещи надо контролировать, поэтому кроме тебя без исходных данных никто не отладит твой код.


Eraser   (2005-09-02 21:38:00) [9]

pathfinder   (02.09.05 21:24)
в цикле repeat..until Вылезает ошибка


Почему бы сразу не сказать ГДЕ конкретно в цикле вылетает ошибка...?

Вообще код, мягко говоря, неуниверсальный )


Наверх

Титульная страница Поиск, карта сайта Написать письмо