|
StrToFloat , StrToInt 같은 String 변환함수에는
SysUtils에 3가지 형태가 만들어져 있습니다.
타입1 . StringToFloat
타입2. StringToFloatDef
타입3. TryStrinToFloat
세가지는 모두 에러처리를 어떻게 하냐에 따라 나누어졌다고 볼수 있는데....
타입1은 에러가 발생했을때 Exception이 발생합니다.
타입2는 에러발생했을때 Default값으로 넘겨준 값을 반환해 줍니다.
샘플 float f;
f = StringToFloatDef ( "asfdadsf", 0 );
; 이경우 "asfdadsf" 은 float형으로 변환할수 없기때문에 Default값으로 준 0 값을 반환해주는것입니다.
타입3 는 기본적으로 return 값이 bool형입니다.
성공적으로 변환하면 true를 , 실패하면 false를 반환하죠
성공적으로 변환했을때 값은 call by refrence 로 넘겨주죠
샘플
float f ;
if( ! TryToFloat( "asdfafd" , f ))
{
ShowMessage("값이 잘못되었네요...") ;
}
그럼....
wjdrms 님이 쓰신 글 :
: 엑셀파일을 열어서 저장된 데이타를 분석해서 깨진데이타가 조건에 맞지 않는 값이 있는지
:
: 확인하려고 하는데 엑셀 데이타 안에 숫자만 있으면 잘 동작합니다.
:
: 그런데 기본적으로 엑셀파일에 파일에 대한 정보가 저장이 되어있고 그다음에 숫자가 입력되어있기때문에
:
: 에러가 나네요..
:
: test.xls
:
: 파일이름 : 행복
: 파일 버전 : 행복한 버전
: 날짜 : 2008년 1월 18일
:
: 시간 데이타1 데이타2
: 14:11:00 1 2
: 14:11:00 1 2
: 14:11:00 1 2
: 14:11:00 1 2
: 14:11:00 1 2
:
:
: 이런식으로 저장이 되어잇습니다.
:
: while(iRow <= data->Count){ //while
: iEnd = iRow - 1;
: if(iBegin > 0 && iEnd > 0 && iBegin < iEnd){//if3
: asString = asBuffer.SubString(iBegin, iEnd - iBegin + 1);
: // StringList에 넣은 후, comma로 구분한다.
: slTemp = new TStringList;
: slTemp->Clear();
: slTemp->Delimiter = char(9);
: slTemp->DelimitedText = asString;
:
: if(slTemp->Count == 4){//if4
:
: try{
:
: data1= StrToFloat(slTemp->Strings[1]);
: data2= StrToFloat(slTemp->Strings[2]);
: }
: catch(Exception& e){//문자에 대한 예외 처리
: }
:
: }
: delete slTemp;
: slTemp = NULL;
: iRow++;
: }
: }
: iRow++;
:
:
: 이런식으로 처리했는데 검색해보니까 문자에 대한 예외처리를 해야한다고도 하고
: // StrToFloatDef(); 이걸 사용하면 된다고도 하는데 정확한 방법을 모르겠네요.
:
: 답변 부탁드릴게요
|