Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизПосмотрите пожалуйста свежим взглядом! Найти похожие ветки
← →
pathfinder (2005-09-02 21:24) [0]Что-то ему не нравится в цикле 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.
← →
Eraser © (2005-09-02 21:38) [1]pathfinder (02.09.05 21:24)
в цикле repeat..until Вылезает ошибка
Почему бы сразу не сказать ГДЕ конкретно в цикле вылетает ошибка...?
Вообще код, мягко говоря, неуниверсальный )
← →
Alexander Panov © (2005-09-02 21:40) [2]1. Отоформатируй как следует код - уважай тех, кто может помочь тебе.
2. Заметь, что строка может быть короче, чем(S[897]="/") and (S[900]="/")
Такие вещи надо контролировать, поэтому кроме тебя без исходных данных никто не отладит твой код.
← →
begin...end © (2005-09-02 21:55) [3]> pathfinder (02.09.05 21:24)
> c:=900;
> repeat
> S[c]:=S[c+1];
> c:=c+1;
> until (S[900]="/");
Посмотрел свежим взглядом. Не понял, зачем здесь цикл. Он будет либо продолжаться до первого исключения из-за выхода за границы строки, либо выполнится один раз.
← →
pathfinder (2005-09-02 22:03) [4]
> begin...end ©
Цикл для того, чтобы сдвигать символы начиная с 901 позиции на одну позицию влево до тех пор пока в поз. 900 не будет символа "/". Но почему-то не работает(
← →
pathfinder (2005-09-02 22:06) [5]
> Eraser ©
> Почему бы сразу не сказать ГДЕ конкретно в цикле вылетает
> ошибка...?
если бы я знал..просто без этого цикла ее нет
> Вообще код, мягко говоря, неуниверсальный )
а кто говорит, что это супер-код?)
> Alexander Panov ©
> 1. Отоформатируй как следует код - уважай тех, кто может
> помочь тебе.
старался как мог..простите, если что не так.
← →
Alexander Panov © (2005-09-02 22:13) [6]Для каждой строки в цикле по списку строк:
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;
← →
Alexander Panov © (2005-09-02 22:14) [7]Alexander Panov © (02.09.05 22:13) [6]
Length(s1)-1);
Это не обязательно, можно просто 10000
← →
pathfinder (2005-09-02 22:20) [8]Спасибо! Разобрался наконец таки)
← →
Alexander Panov © (2005-09-02 22:22) [9]pathfinder (02.09.05 22:20) [8]
Я думаю, что тебе просто нужно посмотреть свежим;) на функции Copy, Pos
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c