이성희 님이 쓰신 글 :
: 김백일 님이 쓰신 글 :
: : 이성희 님이 쓰신 글 :
: : : 텍스트 화일을 한라인씩 읽어들여서 해당 사이즈만큼 DB에 저장하고 싶습니다.
: : :
: : : 예를 들어 한라인의 처음부터 5자리까지는 코드,6부터 10까지는 성명,11부터30까지는 주소
: : : 이런식으로 정해져 있는 텍스트 화일을 읽어서 DB의 해당 필드에 저장하고 싶습니다.
: : :
: : : 아직 부족한게 많아서 어떻게 해야할지 헤메고 있습니다.
: : : 고수님들의 조언 부탁드립니다.
: : :
: : : 무더운 날 모두 즐프하세요.
: :
: : 이렇게 필드의 길이가 고정되어 있는 경우라면
: : 굳이 한 라인 씩 읽을 필요는 없습니다.
: : 굳이 한 라인 씩 읽어서 처리하려면 제가 쓴 다음 글을 참고하세요.
: :
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_qna&no=767
: :
: : 그런 다음 필드를 분리하는 것은
: : 문자열의 서브스트링을 구하는 것입니다.
: : ANSI C++ 라이브러리의 string을 사용한다면 substr() 멤버함수를,
: : VCL의 AnsiString을 사용한다면 SubString() 멤버함수를 사용하시면 됩니다.
: :
: : string의 인덱스는 0부터, AnsiString은 1부터 시작한다는 점을 유의하셔야 합니다.
:
: 님아 제가 기초가 부족해서 그런지 막상 할려고 하니깐
: 잘 않되네요 좀 더 자세한 설명 부탁드려도 될까요?
"님아"라는 말은 상당히 실례되는 통신어체입니다.
이런 말은 쓰지 말아주세요!
: 아직 많이 초보라서 헤메고 있습니다.
: 예제라도 있으시면 부탁드립니다.
:
: 더운날씨 잘이겨내시고 즐거운 하루되세요 *^.^*
각 필드가 텍스트 파일에서 고정된 길이로 되어 있다면
한 라인 전부를 읽을 필요없이 다음과 같이 처리하는 방법도 있습니다.
EMP 테이블이 다음과 같이 작성되어 있고,
CREATE TABLE EMP (
CODE CHAR(5)
NAME CHAR(5)
ADDR VARCHAR(20)
);
이 테이블을 Table1 으로 연결했다면,
다음과 같은 코드를 생각할 수가 있겠습니다.
// 맨 뒤에 '\0'을 붙여야 하므로 1을 추가합니다.
#define CODE_WIDTH 6
#define NAME_WIDTH 6
#define ADDR_WIDTH 21
....
if (Form1->OpenDialog1->Execute()){
istream fin(Form1->OpenDialog1->FileName.c_str());
if (!fin)
ShowMessage("File Open Error!");
else {
char code[CODE_WIDTH], name[NAME_WIDTH], addr[ADDR_WIDTH];
while (fin.getline(code, CODE_WIDTH).getline(name, NAME_WIDTH).getline(addr, ADDR_WIDTH))
Table1->InsertRecord(ARRAYOFCONST((code, name, addr)));
}
}
실행은 안 해봤습니다. 이상있으면 다시 질문하세요.