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
[20391] 그냥 ANSI C/C++ 스트림 라이브러리를 쓰세요.
김백일 [cedar] 1401 읽음    2002-07-25 19:07
우시관 님이 쓰신 글 :
: 안녕하세요... 항상 이렇게 도움만 받고 있으니...
: 나두 언젠간 도움을 줄 수 있으리라 생각하며...
:
: 화일 입,출력 문제입니다.
: 빌더에서 다음과 같이 [탭]으로 구분된 data가 있습니다.
:
: 0.01    9.999
: 0.02    9.996
: 0.03    9.991
: 0.04    9.984
: 0.05    9.975
: 0.06    9.964
: 0.07    9.951
: 0.08    9.936
: 0.09    9.919
: 0.1    9.9
: 0.11    9.879
: ......

VCL의 파일 입출력 함수인 FileRead(), FileWrite() 함수는
필드 폭이 정확히 고정된 경우이거나, 바이너리 파일 입출력에 알맞습니다.
아래와 같은 Formatted Text Input/Output은
ANSI C/C++의 스트림 라이브러리를 쓰시는 것이 훨씬 편리합니다.
(물론 FileRead()와 FileWrite()의 기능도 커버할 수 있습니다.
그래서 저는 VCL의 파일 입출력 함수는 거의 쓰지 않습니다.)

여기서부터는 ANSI C++ 스트림 라이브러리로 설명하겠습니다.

: 두개를 double x[], double y[] 변수로 읽어 들이고 싶은데 어떻게 해야 되나요...???

ANSI C++에서는 배열을 대체하는 vector나 deque 컨테이너를 제공합니다.
vector를 사용한 코드를 써보겠습니다.

    vector<double> vx, vy;
    double dblx, dbly;

    if (Form1->OpenDialog1->Execute()){
        ifstream inFile(Form1->OpenDialog1->FileName.c_str()); // c_str()은 AnsiString을 char* 로 변환
        if (!inFile) // 에러 검사 방법
            ShowMessage("File Open Error!");
        else {
            while (inFile >> dblx >> dbly) { // 입력 끝이거나 잘못된 입력일 때 종료
                vx.push_back(dblx); vy.push_back(dbly);
            }
            inFile.close(); // 이 라인은 굳이 안써도 됩니다.
            // inFile이 스코프를 벗어날 때, ifstream의 소멸자에서 자동으로 파일을 닫습니다.
        }
    }

vx와 vy 벡터의 내용을
Memo1으로 출력하려면 다음과 같이 쓰면 됩니다.
   
    Memo1->Clear();
    for (size_t i = 0; i < vx.size(); i++) // size_t는 unsigned int => warning을 피하기 위함.
      Memo1->Lines->Add(FloatToStr(vx[i]) + "\t" + FloatToStr(vy[i])); // operator[]를 사용
   

: data의 길이가 모두 똑같을 경우 구조체를 사용해도 될 것은 같은데...
: 데이타의 비트 수도 조금씩 다르고...
: 그냥 basic 이나 포트란 같이 변수에 하나씩 받아 들이는 방법은 없을가요???
:
: FileRead  함수를 사용해서 한번에 2개씩 x[],y[]에 읽으려면 어떻게 해야 되는지요...
: 아니면 다른 함수가 있는지요...???
:
: 고수님들 부탁드립니다.

+ -

관련 글 리스트
20387 [질문] 화일 입출력 문제... 부탁드립니다. 우시관 852 2002/07/25
20391     그냥 ANSI C/C++ 스트림 라이브러리를 쓰세요. 김백일 1401 2002/07/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.