Вниз
Скачать: CL | DM;

Прерывание Thread из-за исключения...   Найти похожие ветки 

← →
SergP ©   (2005-11-26 20:49) [0]

Имеется процедура которая парсит данные 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 ...


← →
SergP ©   (2005-11-26 20:51) [1]


>      frmmain.Memo1.Lines.Add(s);


это для отладки. На это можно не обращать внимания....


← →
Virgo_Style ©   (2005-11-26 20:59) [2]

SergP ©   (26.11.05 20:49)

> Почему так? Ведь код заключен в try finally end ...


try-finally-end позволяет выполнить определенные действия в любом случае, но при этом не "гасит" возникшее исключение.


← →
DrPass ©   (2005-11-26 22:21) [3]


> Ведь код заключен в try finally end ...

try..except



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
1-1132948488
Kot
2005-11-25 22:54
2005.12.25
Работа с MSExcel - создание рамки таблицы


4-1130327381
Хинт
2005-10-26 15:49
2005.12.25
Hook на нажатие клавиш


1-1133331594
leonidus
2005-11-30 09:19
2005.12.25
Помогите пожалуйста перевести код с Си на Delphi


14-1133507050
Ega23
2005-12-02 10:04
2005.12.25
С днем рождения! 2 декабря


4-1129821174
The One
2005-10-20 19:12
2005.12.25
Pointer --->Integer-->String, как?




   Наверх