|
태즈 님이 쓰신 글 :
: 텍스트 파일을 처리할때...
: 게으르고, 아는 게 별로 없는 태즈는 텍스트 파일을 처리할 때 그냥 이렇게 해버리곤 한답니다.
:
: 우선 TMemo를 폼에 하나 올립니다. Visible속성을 off ( no인가..?)로 해서 안보이게 만들고..
: TMemo내에 있는 Lines (TStrings) 을 이용해서 텍스트 파일을 읽어들이고 처리를 합니다.
: TStrings가 상당히 유용한 함수들을 많이 제공하기 때문에...
:
: (일단 TMemo를 올려놓고 그 이름을 temp_memo라고 하면...)
:
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
:
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: TStrings* str_file ;
:
: str_file = temp_memo->Lines ;
:
: str_file->LoadFromFile("c:\AUTOEXEC.BAT");
: str_file->Append("마지막 라인에 추가하는 함수입니다.");
: }
:
: TStrings에 입력커서를 두시고 F1을 눌러서 나오는 도움말을 잘 읽어보시면 어떻게 쓰는 건지
: 쉽게 아실 수 있으실 겁니다. 위의 Append가 한 예.
:
: #################
: 물론, 이런 얍사리 수가 프로그래밍 실력을 배양시키는데에는 전혀 도움이 안 됩니다.
: 그냥.. 급하게 작은 프로그램을 짤 때... 프로그램에서 주로 신경써야 할 부분이 파일관계된
: 부분이 아닐때.. 이럴때 그냥 임시방편삼아서....
: 그냥 이런 방법도 있기에.. 간단 무식...
: #################
흠... 이걸 '꽁수'라고 할 수 있을까요?
BCB에서 텍스트 파일을 다룰 때, 어지간히 큰 파일이 아니라면
TStrings 클래스의 LoadFromFile 메소드를 사용해서
한번에 메모리에 올려두고 TStrings 클래스의 여러 메소드를 사용해서 원하는 작업을
한 후에 SaveToFile메소드로 저장하는 게 '정석'인 방법으로 알고 있는데요!
: TStrings는 virtual method들만 가지고 있기 때문에 직접 인스턴스를 생성할 수는 없습니다.
: TStrings를 상속받는 클래스를 만들고 이를 통해서 어떻게 해야합니다.
: (저도 해본적은 없고.. 도움말에 그렇게...)
TStrings 클래스의 인스턴스를 생성하려면, TStrings 대신 TStrings의
서브클래스인 TStringList 클래스를 사용하면 됩니다.
다음은 도움말에 있는 예제 코드입니다.
void __fastcall TForm1::ButtonClick1(TObject *Sender)
{
TStringList *TempList = new TStringList; // declare the list
try{
//use the string list
}
__finally{
delete TempList; // destroy the list object
}
}
만약 위의 코드도 너무 길다고 생각하신다거나,
메모리를 동적으로 할당하기 싫으시다면,
자료실의 RX 라이브러리를 설치하신 후에
StrHolder 컴퍼넌트를 폼에 드래그해서 놓으시면
이 콤포넌트의 Strings 속성이 바로 TStrings 클래스입니다.
즉, 보이지 않는 메모 컨트롤라고 할 수 있습니다.
이 방법은 TStrings 객체의 메모리 할당을 정적으로 할 수
있다는 것이죠.
또한 TMemo의 Strings 속성과는 달리 64k 메모리 제한이 없습니다.
PS)
TStrings도 일종의 ADT(Abstract Data Type)인데,
클래스 소스 파일을 프로젝트에 명시적으로 첨가할 필요없이
이렇게 컴포넌트로 만들어두면, 컴포넌트 팔레트에서
클릭하는 것만으로 그 클래스를 사용할 수 있다는 것은
정말 BCB/델파이의 엄청난 편의성이죠!
|