C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60288] Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리...
제리압빠. [kamizen] 1390 읽음    2010-02-22 17:39
소스코드 일부만 있는거 같은데용..
str.t_str().... 이 부분은 2009에서 새로 지원하는 String의 메소든가 보군요..

저는 아직 6.0 을 쓰는 처지라..유유
음.. 작성하신 코드 상으로는 풀어보면.
1) char 어레이를 초기화 한다.
2) String 형 데이타에서 특정 부위(?) 만큼의 숫자 필드 영역을 잘라서 char배열에 담는다.
3) int형으로 형변환 한다.
4) int형을 다시 형변환 하여 String( Caption )에 담는다..

순으로 진행이 되는데요..

나열한거에 보다 시피 형변환이 좀 빈번히 발생하는게 아닌가 싶네요.
윗분들 말씀하신 거에 좀더 사족을 달아 보자면..

위에서 거치는 형변환을 좀 줄이자 입니다.
윗분들 코드 사례를 보면 char *어레이 형 데이타가 필요 없어지지요.
( 내부에서 쓸일이 없다면 말입니다.. )
이부분을 좀 줄여서 2단게로 만들어 버리는게 제 개인적인 생각으로 좀 더 나은 생각이 아닌가 사려 됩니다.

    // 1 필요한 데이타 부분을 Label에 바로 담아 버립니다.
    Label1->Caption = Edit1->Text.SubString( 4 , Edit1->Text.Length() - 3  );
    // 2. Label1을 버퍼로 사용하였으므로 가공을 위한 인트형으로 바로 세트 한다.
    int ibuff = Data.ToInt();

이렇게 되면 좀 더 효율이 올라가지 않으려나요...
Label을 사용하지 않을 계획이라면 윗분들의 예제 처럼 바로 Int 변수에 결과를 담아 버리는 것도 괜챦구요..

만약 위에 사용하신 데이타가 "abc1234" 가 Fixed length 타입의 전문 이라고 하면...아래 처리 부분 처럼 하면
될 듯 싶네요.. fixed length 인 경우 가공작업이 좀 필요하기도 합니다. 널스트링 이 없는 관계로.. 하지만 파일에서
로드하는 경우라면 파일에 구조체 통으로 바이너리 타입 저장 이라면 별 문제 업겠지용.
//---------------------------------------------------------------------------

#pragma pack( push , 1);
typedef struct tag_x
{
    char ABC[3];
    char NUMS[4];
}st_x;

#pragma pack(pop);

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 원본 ..
    String Data = Edit2->Text;
    char buff[4+1];
    int  x;
    memset( buff , 0x00 , sizeof( buff ));
    strncpy( buff , (Edit2->Text.c_str())+3 , Edit2->Text.Length() - 3 );

    x = atoi( buff );
    ShowMessage( x );


    // 잛게
    Label1->Caption = Edit1->Text.SubString( 4 , Edit1->Text.Length() - 3  );
    x = Label1->Caption.ToInt();
    ShowMessage( x );

    // 고정전문 방식.  뒷부분에 다른 문자열이 있다면 잘라 담는 처리를 위한 버퍼 필요함( 1234 ) 다음
    st_x sbuff;
    memcpy( &sbuff , Edit2->Text.c_str() , sizeof( sbuff ));
    Label3->Caption = sbuff.NUMS;
    ShowMessage( atoi( sbuff.NUMS ));

}
//---------------------------------------------------------------------------

즐 플 하세염~~~!

+ -

관련 글 리스트
60276 황당한 일이 생겨서리... 복이 1630 2010/02/21
60277     Re:황당한 일이 생겨서리... 한수동 1393 2010/02/21
60278         Re:Re:황당한 일이 생겨서리... 장성호 1604 2010/02/22
60282             Re:Re:Re:황당한 일이 생겨서리... Nibble 1468 2010/02/22
60283                 Re:Re:Re:Re:황당한 일이 생겨서리... Lynx 1378 2010/02/22
60284                     Re:Re:Re:Re:Re:황당한 일이 생겨서리... Nibble 1326 2010/02/22
60288                         Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... 제리압빠. 1390 2010/02/22
60291                             Re:Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... 장성호 1521 2010/02/22
60296                                 Re:Re:Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... 제리압빠. 1194 2010/02/23
60298                                     Re:Re:Re:Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... Nibble 1228 2010/02/23
60299                                         Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... 제리압빠. 1424 2010/02/23
60292                                 Re:Re:Re:Re:Re:Re:Re:Re:황당한 일이 생겨서리... Nibble 1229 2010/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.