오전에도 어떤분의 도움으로 일부 처리를 한 부분이었는데. 막상 결과값을 내 놓고 보니, 줄단위 문자열 대입이 아니고요, 문자단위 대입이더라고요.ㅠ.ㅠ
<!--CodeS-->
HTMLStr := TStringList.create;
HTMLStr.Text := WebBrowser1.OleObject.Document.DocumentElement.OuterHTML;
for index := 0 to HTMLStr.count-1 do
begin
// 번호 추출
gcodeStr := Pos(':goASPPage(''', HTMLStr.Text[index])+11;
HTMLDoc1 := copy(HTMLStr.Text[index], gcodeStr,13);
if HTMLDoc1 <> '' then memo1.Lines.Add(HTMLDoc1);
// 회차 추출
gcodeStr := Pos(''',', HTMLStr.Text[index])+2;
HTMLDoc2 := copy(HTMLStr.Text[index], gcodeStr,4);
if HTMLDoc2 <> '' then memo1.Lines.Add(HTMLDoc2);
end;
HTMLStr.free;
except
end;
<!--CodeE-->
실제 String 텍스트는 350 줄 정도인데요. showMessage 하면 2만줄이 넘는 걸로 나오네요ㅠ.ㅠ
문자단위로 대입하는게 아니고 문장단위로 대입하는 방법이 없을까요...답변 부탁드립니다.ㅠ.ㅠ
루프도 바꿨습니다.
기존 소스에서 HTMLStr.Text[index]를 HtmlStr[index]로 바꿔줘도 될듯합니다.
HTMLDoc := 으로 대입이 있는 쪽에 LastPostion에 +12, +2를 추가했습니다.
찾는 내용 뒷쪽걸 복사하실테니 넣어주시는게 정상이겠네요.
기존 질문을 못 봐서 정확히는 모르겠습니다만,
검색 결과를 무시하고 한글자씩 넘어가며 매번 중복해서 찾네요.
"1234567890a"문장에서 "a"를 찾으면 결과가 11번 나오는데 이걸 원하시는건 아니겠죠???
PosEx로 찾기 시작하는곳을 지난번 찾은데 이후로 인덱스를 주어 찾으세요.
<!--CodeS-->
var
LastPostion : integer;
HTMLStr := TStringList.create;
HTMLStr.Text := WebBrowser1.OleObject.Document.DocumentElement.OuterHTML;
LastPostion := -1; // 추가
while LastPostion <> 0 do begin
begin
// 번호 추출
LastPostion := PosEx(':goASPPage(''', HTMLStr.Text, LastPostion+1);
HTMLDoc1 := copy(HTMLStr.Text, LastPosition+13,13);
if HTMLDoc1 <> '' then memo1.Lines.Add(HTMLDoc1);
// 회차 추출
LastPostion := Pos(''',', HTMLStr.Text, LastPostion+1);
HTMLDoc2 := copy(HTMLStr.Text, LastPosition+2,4);
if HTMLDoc2 <> '' then memo1.Lines.Add(HTMLDoc2);
// * "회차"가 반드시 "번호" 이후에 나타나는것이 아니라면 인덱스를 하나 더 쓰세요.
// 인덱스 = LastPosition (타이핑을 좋아하시면 iLastSearchResultPostion 같은것도 괜찮을듯... ^^)
end;
HTMLStr.free;
except
end;
<!--CodeE-->