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
[36652] Re:특정디렉토리 파일에서 문자검색
유영인 Cuperido [cuperido] 1527 읽음    2004-08-09 15:00
솔직히 질문이 100% 이해 된것 같지는 않습니다.

제 생각에는 키워드가 두개 이상이면 파일 포인터에 따라서 비교가
힘드신 문제 같아 보이니, 거기에 초점을 맞춰서 답변해 드리겠습니다.

1. 우선, Memo1 에 파일을 통채로 읽어냅니다.
Memo1->Lines->LoadFromFile("해당 파일");

2. 그 다음, 키워드를 찾아봅니다.
int itPosition = Memo1->Lines->Text.Strings.Pos("키워드1");
if(itPosition <= 0) int itPosition = Memo1->Lines->Text.Strings.Pos("키워드2");

만약, itPosition이 1이상이라면, 해당 키워드가 존재하는 것입니다.
이런식으로 키워드를 찾았으면, 해당 위치를 저장시키고 그 다음부터
다시 계산을 합니다.

3. 시작 위치를 단어를 찾은 다음부터 계산
Memo1->Lines->Text = Memo1->Lines->Text.SubString(itPosition, Memo1->Lines->Text.Length());

이렇게 계산을 계속 해나가면, 파일 끝까지 위치를 추적할 수 있을것 같습니다.
위에서는 이해를 돕기 위하여 직접 억세스를 하였지만, 조금 더 깔끔하게 보이면서 속도를 빠르게
하기 위하여, StringList를 생성하고 Memo1->Lines->Text를 따로 String에 저장해서 계산 하시는
것이 좋으실것 같습니다.


cuperido


최진호 님이 쓰신 글 :
: 안녕하세요...
:
: 제가 하고 싶은것은..
:
: abc 라는 디렉토리에... 파일이 1.txt,2.txt,3.txt,4.txt,5.txt ...있습니다  (무한개는 아님)
:
:  각 파일 안에는 특정 문자열이  있을수도 있고 없을수도 있습니다.(특정 문자열이 여러개 있을수도 있음)
:
: 각 파일에서 특정 문자 문자열 들을  읽어 그 디렉토리 아래에 temp 디렉토리를 만들고 각각의 파일 이름으로 특정 문자 열을 저장하는것 입니다.
: 예를 들면..
:
: 1.txt   안에 내용이 -> 오오 (필승) 코리아 (오오) 필승 코리아
: 2.txt     "  "            -> (코리아) 원더플
: 3.txt     "  "            -> 오오 (통재라)
: "
: "
: 이런식일때...만약에 () 안에 들어 있는 내용을 찾으로고 하면
: 결고가 이런식으로 됩니다.( C:\ex\temp\1.txt 안에 내용이 -> (필승)
:                                                                                                (오오)
:                                          C:\ex\temp\2.txt 안에 내용이  ->(코리아)
:                                          C:\ex\temp\3.txt 안에 내용이  ->(통재라)
:
: ()이 한개 일때는 할수 있겠는데..두개 이상 되니까..구현하기 힘드네요
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:   AnsiString currpath,Filename,SaveEn,FileSv;
:   int Enps1,Enps2;
:   int inFile;
:   char *pszBuffer;
:   int iFileLen;
:   TSearchRec sr;
:   Memo1->Clear();
:   if(FindFirst("c:\\ex1\\*.txt",faArchive,sr)==0)
:   {
:       do{  Memo3->Clear();
:            Memo1->Lines->Add(sr.Name);
:            currpath="c:\\ex1\\";
:            Filename=currpath+sr.Name;
:            inFile=FileOpen(Filename.c_str(),fmOpenReadWrite);
:            iFileLen=FileSeek(inFile,0,2);
:            FileSeek(inFile,0,0);
:            pszBuffer =new char[iFileLen+1];
:            FileRead(inFile,pszBuffer,iFileLen);
:            SaveEn=pszBuffer;
:            Enps1=(SaveEn.AnsiPos("("));
:            Enps2=(SaveEn.AnsiPos(")"));
:            SaveEn.SubString(Enps1,Enps2-(Enps1-1));
:            Memo3->Lines->Add(SaveEn.SubString(Enps1,Enps2-(Enps1-1)));
:            Filename=currpath+"temp";
:            Memo3->Lines->SaveToFile(sr.Name);
:            delete[] pszBuffer;
:            FileClose(inFile);
:         }
:       while(FindNext(sr)==0);
:   }
:
:   FindClose(sr);
: }
:
: 제가 짠것은 이런식인데..이 이상 어떻게 해야 될지 모르겟어요..
: 고수님들 부탁드립니다

+ -

관련 글 리스트
36635 특정디렉토리 파일에서 문자검색 최진호 1096 2004/08/07
36652     Re:특정디렉토리 파일에서 문자검색 유영인 Cuperido 1527 2004/08/09
36665         Re:Re:특정디렉토리 파일에서 문자검색 최진호 1033 2004/08/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.