|
초보 님이 쓰신 글 :
: 안녕하세요?
: 궁금한게 있어서 이렇게 글을 올립니다.
:
: 델파이에서는 텍스트 파일을 읽어서 라인단위로 문자열을 저장하는 게 어렵지 않았는데
: 씨빌더에서는 어떻게 해야 할 지 모르겠군요.(너무 초보라...)
:
: 씨빌더에서 텍스트 파일을 읽어서 라인단위로 문자열을 저장하려면 어떻게 해야 하는지 좀 가르쳐 주세요.
:
: 그리고 텍스트 파일의 라인수를 리턴하는 함수가 있으면 좀 알려 주세요.
빌더나 델파이나 동일한 VCL/CLX을 사용하기 때문에,
C++ 문법을 마스터하셨다면 거의 기계적인 노가다로 서로 수정할 수 있지 않나요?
VCL에서 텍스트 파일 처리를 가장 쉽게 하는 방법은
TStringList의 LoadFromFile()과 SaveToFile()함수를 쓰는 방법입니다.
라인 수는 TStringList의 Count 속성을 읽으면 되지요.
단, 텍스트 파일을 램에 전부 로드할 수 없을 정도로 크다면 이 방법을 쓸 수는 없겠죠.
이 경우에 굳이 VCL을 쓰려면 TFileStream을 쓰는 방법이 있습니다만,
텍스트 파일 처리용으로는 여러가지 귀찮은 면이 있죠.
: (참고로 델파이에서는 텍스트 파일을 파일포인터를 사용해서 열구 문자열 포인터에 라인별루 넘겨 주었습니다.
: 그리고 라인수는 한 라인을 읽을 때 마다 카운트를 하여 파일의 끝(EOF)에서 라인수를 리턴하였습니다.
: 좀 노가다를 했죠. ^^;;)
위의 말은 VCL을 안쓰고 파스칼 언어에서 지원하는 파일 입출력 기능을 썼단 말씀이죠?
ANSI C 라이브러리에서도 역시 파일포인터라는 개념을 사용하여 입출력합니다.
파스칼과 상당히 유사하지요.
fopen 을 비롯한 f로 시작하는 함수들을 사용하여 위의 알고리듬대로 구현하시면 됩니다.
C보다는 C++을 쓰고 싶으시다면
다음과 같이 간단하게 처리할 수 있습니다.
ifstream fin("in.txt");
ofstream fout("out.txt");
string line;
int count = 0;
while (getline(fin, line)) {
fout << line << endl;
++count;
}
|