Q&A

  • 문자열 추출중 불필요없는 것이 따라오는데요. 조언 부탁드려요.^^*
안녕하세요, 초보하나 많은 도움에 감사를 드려요.^^*
실제 추출할 HTML 소스와 pas 소스는 아래와 같구요...

- HTML 소스 -------------------------------------------------------
...
...줄공백
...
<html>
<head>
<title>물품목록조회</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<link rel="stylesheet" type="text/css" href="../css/TA.css">
<script language="javascript">
...
... 생략
...
     <a href="javascript:goASPPage('20061217446','00')">20061217446-00</a>

   </td>
   <td class=tdcc>일반</td>
   <td class=tdc>
     <a href="javascript:goASPPage('20061217446','00')">

....생략
</body>
</html>
-------------------------------------------------------------------

<!--CodeS-->
- unit.pas --------------------------------------------------------
// html추출
procedure TForm1.htmlSrc(Sender: TObject);
begin
try
Memo1.Clear;

// 브라우져에서 html추출
HTMLStr := TStringList.create;
HTMLStr.Text := WebBrowser1.OleObject.Document.DocumentElement.OuterHTML;

for index := 0 to HTMLStr.Count-1 do
begin

   // 번호 추출
   gcodeStr := Pos(':goASPPage(''', HTMLStr.strings[index])+11;
   HTMLDoc1 := copy(HTMLStr.strings[index], gcodeStr+1,11);

   // 회차 추출
   gcodeStr := Pos(''',', HTMLStr.strings[index])+2;
   HTMLDoc2 := copy(HTMLStr.strings[index], gcodeStr+1,2);

   if HTMLDoc1 <> '' then memo1.Lines.Add(HTMLDoc1);
   if HTMLDoc2 <> '' then memo1.Lines.Add(HTMLDoc2);

   HTMLDoc := HTMLDoc1 + '-' + HTMLDoc2;
   memo1.Lines.Add(HTMLDoc);

end;
HTMLStr.free;
except
end;

end;
-------------------------------------------------------------------
<!--CodeE-->
위의 HTML 소스를 아래의 Pas 소스로 돌리게 되면, 이상하게도 Pos() 로 지정된 문자열기준에서 정확히 뽑아오는 부분도 있지만 비정상적인 부분까지도 뽑아오더라구요.


- 결과물 ----------------------------------------------------------
...생략
-R>
iddle heigh-D
Spacing=0 c-AB
-BO
-R>
useover="im-D>
useover="im-',
useover="im-D>
useover="im-D>
useover="im-D>
useover="im-'p
useover="im-D>
useover="im-D>
...
-------------------------------------------------------------------


델파이 생각보다 너무 어려운것 같아요 ㅠ.ㅠ
작은 조언 한말씀 부탁드려요.
4  COMMENTS
  • Profile
    손희석 2006.12.22 19:40
    문자열 추출은 Regular Expression(정규식) 기능을 사용하시면 좋습니다.
    정규식 규칙만 조금 익히면 원하시는 부분의 문자열 추출은 어렵지 않습니다.
    시간을 조금 투자하셔서 정규식 공부하시고 해당 소스를 추출하는 식을 만들어내서 적용하면 되겠습니다.

    여기 사이트에 들어가시면 컴포넌트는 받으실수 있습니다.
    http://www.regexbuddy.com/delphi.html

    도움이 되실련지.. 초보님.. 어려울수도 있지만 익혀두면
    나중에 이 기술이 무지 도움이 된답니다..
    그럼 수고하세요.


  • Profile
    이하나 2006.12.22 20:06
    먼저 답변 감사드려요^^*;
    정규표현식은 다른 언어를 쓸때 쓰긴 하는데요.
    아직 시작하진 얼마안된 초보다 보니 델파이로는 정규표현식의 개념이 없어서요.ㅠ.ㅠ
    다른 해결법이 없을까요?






  • Profile
    손희석 2006.12.22 20:44
    델파이와 정규표현식은 무관한 언어 입니다.
    제가 참조로 알려드린 사이트는 정규표현식(Perl언어에서 사용하는 엔진)컴포넌트를 가지고 사용할수 있습니다.
    펄언어에 있는 정규표현식을 사용해보신 경험이 있으시다면 해당 컴포넌트로 충분히 해결이 가능하리라 생각합니다.
    제가 사용해보고 가능하다면 소스와 답변을 다시 드리겠습니다.

  • Profile
    이하나 2006.12.24 00:30
    전혀 생각지도 못했던 부분이 제가 알고있는 구문데로 돌아가질 않았었네요.
    생각외로 단순한 부분이었는데, 아무래도 리퍼런스 없이 작업하는게 그리 쉽지는 않은 것 같아요...

    답변 감사해요, 많은 도움이 되었습니다.^^*