|
솔직히 질문이 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);
: }
:
: 제가 짠것은 이런식인데..이 이상 어떻게 해야 될지 모르겟어요..
: 고수님들 부탁드립니다
|