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
[64588] Re:Re:Re:Re:Re:Re:StringGrid를 TChart로 표현하는 문제입니다.
엘카 [] 1382 읽음    2011-06-13 13:28
네로님이 알려주신대로 Trim()으로 str =! ""을 해보려 했으나 이해를 못 하여 다른 방법으로 시도를 해보았습니다.
아래와 같이 AnsiString을 char으로 변환하여 char을 atof() 함수를 이용해 실수로 변환시켰습니다.


    AnsiString str;
    char *Tmp;
    double X, Y;
    int i = 0;

    for(i = 0; i<StringGrid1->RowCount; i++)
    {
        str = StringGrid1->Cells[12][i+1];
        Tmp = str.c_str();
        X = atof(Tmp);
        str = StringGrid1->Cells[0][i+1];
        Tmp = str.c_str();
        Y = atof(Tmp);

        Series1->Add(X, Y);
    }



네로 님이 쓰신 글 :
: 아래에서 얘기 드린 공백은 스페이스가 아닙미다. " "와 "" 중에 후자를 말하는겁니다.
: 두경우다 str.ToDouble() 함수를 사용할 경우 에러를 발생시킵니다.
: str.ToDouble()함수를 호출하기 전에 str이 숫자인지 판결하는 코드가
: 필요할것 같습니다.
: 단순히 아래의 경우라면 Trim()후에 str != "" 만 처리해도 되겠죠
:
:
:
: 엘카 님이 쓰신 글 :
: : 네로님의 말을 듣고 공백을 어떻게 처리를 할까 하다가 공백제거 Trim()을 알게 됐습니다.
: : 그래서 Trim()을 이용해 아래와 같이 구현해 보았습니다.
: :
: :     AnsiString str;
: :     double X, Y;
: :
: :     for(i = 0; i<StringGrid1->RowCount; i++)
: :     {
: :         str = StringGrid1->Cells[12][i+1];
: :         Trim(str);
: :         X= str.ToDouble();
: :         str = StringGrid1->Cells[0][i+1];
: :         Trim(str);
: :         Y= str.ToDouble();
: :
: :         Series1->Add(X, Y);
: :     }
: :
: : 그런데도 여전히 에러가 뜹니다.
: : Trim()으로 공백을 제거했는데도 왜 이러한 현상이 나타나는 것일까요?
: :
: :
: : 네로 님이 쓰신 글 :
: : : 엘카 님이 쓰신 글 :
: : : : 답변을 보고 for문을 수정해 보았습니다.
: : : :
: : : :     for(int i = 0; i<StringGrid1->RowCount; i++)
: : : :     {
: : : :         str = StringGrid1->Cells[12][i+1];
: : : :         X = str.ToDouble();
: : : :         str = StringGrid1->Cells[13][i+1];
: : : :         Y = str.ToDouble();
: : : :
: : : :         Series1->Add(X, Y);
: : : :     }
: : : :
: : : : 역시 에러창이 아래와 같이 나타납니다.
: : : :
: : : : Project MainProject.exe raised exception class EConvertError with message ''' is not a valid floating point value'. Process stopped. Use Step or Run to continue.
: : : :
: : : : 언뜻 보기에 X = str.ToDouble(); 라인이 문제인거 같습니다.
: : : : StringGrid의 내용이 문자라 차트로 나타내기 위해서는 숫자로 표현하기 위해 저렇게 형변환을 했는데
: : : : 여기에 문제가 있었을까요??
: : : :
: : : :
: : : :
: : : : smleelms 님이 쓰신 글 :
: : : : : 일단 에러내용으로 봐서는 dataset이 닫혀서 RecordCount를 얻을 수 없다고 나오네요..
: : : : :
: : : : : 그래서 컴파일 오류는 없어도 실행오류가 발생하는 것 같습니다.
: : : : :
: : : : : 그래프에 데이터를 뿌리기전에 dataset이나 query를 Close() 하신것 아닌가 싶네요.
: : : : :
: : : : : 그리고 for문의 카운터는 쿼리의 레코드를 읽어서 하시는데, 데이터는 StringGrid에서 읽어오시네요.
: : : : :
: : : : : DB면 DB, 아니면 StringGrid의 RowCount를 얻어서 사용하시는게 맞을것 같습니다.
: : : : :
: : : : : 엘카 님이 쓰신 글 :
: : : : : : 데이터베이스를 읽어들여서 StringGrid에 나타내고 나타낸 값을 TChart에 표시하려고 합니다.
: : : : : :
: : : : : : 그런데 잘 되지가 않아서 질문을 드립니다.
: : : : : :
: : : : : : -------------------------------------------------------
: : : : : :     AnsiString str;
: : : : : :     double X, Y;
: : : : : :
: : : : : :      for(int i=0; i<dblinerquery->RecordCount; i++)
: : : : : :      {
: : : : : :         str = StringGrid1->Cells[12][i+1];
: : : : : :         X = str.ToDouble();
: : : : : :         str = StringGrid1->Cells[13][i+1];
: : : : : :         Y = str.ToDouble();
: : : : : :
: : : : : :         Series1->Add(X, Y);
: : : : : :      }
: : : : : : -------------------------------------------------------
: : : : : :
: : : : : : StringGrid의 내용이 문자로 지정되어 있어서 AnsiString str에 저장하여 실수형 double로 변환시켰습니다.
: : : : : :
: : : : : : 그리고 TChart에 집어넣었는데 컴파일 에러는 나지 않습니다만 실행하여 버튼을 클릭하면 아래의 에러창이 뜹니다.
: : : : : :
: : : : : : Project MainProject.exe raised exception class EDatabaseError with message 'dblinerquery: Cannot perform this operation on a closed dataset'. Process stopped. Use Step or Run to continue.
: : : : : :
: : : : : : 어디가 문제인가요??
: : :
: : :
: : : str.ToDouble() 라인자체는 문제가 없지만 예외처리가 안되어서 발생하는거죠
: : : 에러메시지는 공백을 double형으로 변경하려해서 생긴 문제입니다.

+ -

관련 글 리스트
64520 StringGrid를 TChart로 표현하는 문제입니다. 엘카 1658 2011/06/07
64525     Re:StringGrid를 TChart로 표현하는 문제입니다. smleelms 1246 2011/06/07
64528         Re:Re:StringGrid를 TChart로 표현하는 문제입니다. 엘카 1703 2011/06/08
64530             Re:Re:Re:StringGrid를 TChart로 표현하는 문제입니다. 네로 1163 2011/06/08
64560                 Re:Re:Re:Re:StringGrid를 TChart로 표현하는 문제입니다. 엘카 1161 2011/06/10
64563                     Re:Re:Re:Re:Re:StringGrid를 TChart로 표현하는 문제입니다. 네로 1043 2011/06/10
64588                         Re:Re:Re:Re:Re:Re:StringGrid를 TChart로 표현하는 문제입니다. 엘카 1382 2011/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.