![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прерывание Thread из-за исключения... [D6, WinXP]
SergP © (2005-11-26 20:49:00)Имеется процедура которая парсит данные csv-формата:
procedure ParseHistory(instr:string);
var
rc:Histrecord;
line,i:integer;
s:string;
lns:TStrings;
fodd:boolean;
begin
lns:=TStringlist.Create;
try
lns.Text:=instr;
lns.Delete(0);
for line:=0 to lns.Count-1 do
begin
s:=lns.Strings[line];
fodd:=true;
for i:=1 to length(s) do
begin
fodd:=fodd xor (s[i]='"');
if (s[i]=',') and fodd then s[i]:=chr(13);
end;
s:=StringReplace(s,'""',chr(2),[rfReplaceAll]);
s:=StringReplace(s,'"','',[rfReplaceAll]);
s:=StringReplace(s,chr(2),'"',[rfReplaceAll]);
frmmain.Memo1.Lines.Add(s);
with TStringList.Create do
try
Text:=s;
rc.htime:=StrToDateTimeDef(strings[0],0);
rc.htype:=strings[1];
rc.hBatch:=StrToIntDef(strings[2],0);
rc.hemetal:=strings[3];
rc.hWeight:=strings[4];
rc.hToFromNumber:=strings[5];
rc.hToFromName:=strings[6];
rc.hEnteredAmount:=StrToCurrDef(strings[7],0);
rc.hEnteredCurrency:=strings[8];
rc.hRate:=StrToCurrDef(strings[9],0);
rc.hMemo:=strings[10];
rc.hPayeeName:=strings[11];
rc.hPayeeAddress:=strings[12];
rc.hRedemptionInfo:=strings[13];
rc.hMerchantRefNumber:=strings[14]; //[исключение]
finally
free;
end;
SetLength(history,length(history)+1);
history[high(history)]:=rc;
end;
finally
lns.Free;
end;
end;
она запускается в дополнительном потоке.
но если в [исключение] возникает исключение (по причине того что strings[14] не существует, то прерывается выполнение потока. Почему так? Ведь код заключен в try finally end ...
DrPass (2005-11-26 22:21:00) [1]
> Ведь код заключен в try finally end ...
try..except
Virgo_Style (2005-11-26 20:59:00) [2]SergP © (26.11.05 20:49)
> Почему так? Ведь код заключен в try finally end ...
try-finally-end позволяет выполнить определенные действия в любом случае, но при этом не "гасит" возникшее исключение.
SergP (2005-11-26 20:51:00) [3]
> frmmain.Memo1.Lines.Add(s);
это для отладки. На это можно не обращать внимания....