BCB如何判斷陳述句是否執行成功?
比如:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString AAA="123.567";
Double aaa;
aaa=AAA.ToDouble();
................(如果“aaa=AAA.ToDouble();”執行成功) ShowMessage(aaa);
................(如果“aaa=AAA.ToDouble();”執行不成功) ShowMessage(“不成功”);
}
或者換個思路:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString AAA="123.567";
Double aaa;
................(如果AAA是數字) aaa=AAA.ToDouble();
................(如果AAA不是數字) ShowMessage("無法轉換");
}
這里,我的主要目的是要把AAA不是數字的情況辨別出來
背景:我在用BCB對某一檔案夾底下的檔案進行批量處理時,想要從檔案中提取資料,但有的檔案提取資料失敗(類似于上面那個例子),就導致整個程式流中斷,我希望能夠將這些出問題的檔案識別出來,并且移到別的檔案夾底下,原檔案夾剩下檔案 繼續自動處理。
我才學BCB沒有多久,思路有,但是無處下手,還有點模模糊糊,這是屬于例外還是什么?
uj5u.com熱心網友回復:
查看help,ToDouble失敗時會拋出什么例外,try,catch陳述句。uj5u.com熱心網友回復:
這是例外處理的一個例子,下面是這個視窗的代碼程式:void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i = 1,j,result;
j = 0;
try
{
result = i / j; //可能有問題的代碼
}
catch(EDivByZero &e) //只捕獲EDivByZero型別,其它型別將由集成環境自動處理
{
//顯示錯誤資訊
ShowMessage(AnsiString("EDivByZero型別例外被捕獲"));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i = 1,j,result;
j = 0;
try
{
result = i / j; //可能有問題的代碼
}
catch(Exception &e) //捕獲Exception型別,可以捕獲所有Exception子型別的例外
{
//顯示錯誤資訊
ShowMessage(AnsiString("Exception子型別"+e.ClassName()+"例外被捕獲"));
ShowMessage(AnsiString(e.Message));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i = 1,j,result;
j = 0;
try
{
result = i / j; //可能有問題的代碼
}
catch(int &e)
{
ShowMessage(AnsiString("例外被int型別捕獲"));
}
catch(EDivByZero &e)
{
ShowMessage(AnsiString("例外被EDivByZero型別捕獲"));
}
}
針對樓主的想法,是否是抓EConvertError(指出字串或物件轉換錯誤)、EInvalidCast(檢查不合法的型別轉換)這兩個例外類就可以了。在VCL類別庫中,常用的例外處理類是ClassName()方法和Message屬性,ClassName()方法用戶可以知道發生了什么型別的例外,Message屬性可以知道發生例外情況的具體資訊。例外處理類的父類是Exception類,所有的其他例外處理類都是他的子類,Exception類參考C++Builder幫助檔案試驗下。
下面是一個資料處理的列子,按照指定的有效位數轉換數字,通過使用C++流格式控制,不知對樓主有否幫助,視窗及代碼如下:

#include "strstream.h"
#include "fstream.h"
#include "iomanip.h"
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
try
{
int iLength=this->Edit1->Text.Length();
if(iLength<1||StrToInt(this->Edit2->Text)>12)
return;
char *StrBuffer=new char[iLength];
ostrstream ofstr(StrBuffer,iLength);
ofstr<<setiosflags(ios::fixed|ios::showpoint)<<setprecision(StrToInt(this->Edit2->Text))
<<StrToFloat(this->Edit1->Text)<<ends;
this->Edit3->Text=StrBuffer;
}
catch(...)
{
MessageBox(Handle,"數字輸入錯誤","資訊提示",MB_OK);
return;
}
}
下面函式,判讀是否是數字、字母或漢字:
bool __fastcall TForm1::IsNumeralData(unsigned char c)//判斷是否為數字、字母
{
if (c >= '0' && c <= '9')
return TRUE;
if (c >= 'A' && c <= 'Z')
return TRUE;
return FALSE;
}
bool __fastcall TForm1::IsGb2312Data(unsigned char c1, unsigned char c2)//判斷是否為中文
{
if (((c1 >= 0xa1 && c1 <= 0xaa) || (c1 >= 0xb0 && c1 <= 0xfa))
&& (c2 >= 0xa1 && c2 <= 0xfe))
{
return TRUE;
}
return FALSE;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/175357.html
標籤:基礎類
