저의 질문은 간단합니다.
어떠한 텍스트에서 주석 부분을 제거하고싶습니다.
예를 들어.. 델파이에서 사용하는 주석 {}과 // 부분을 텍스트에서 제거 하는
로직좀 갈켜주세요.
막상만들려고 보니.. 허접하게 만들었다간.. 택도 없을꺼 같더라고요.
..
많은걸 바라는게 아니라.. 텍스트문자열에서 주석부분 제거하는 로직알고 계시는분....... 리플좀 부탁드리겠습니다.
답변해 주셔서 감사합니다.
그러나 제가 묻고 싶은것은...
주석만 제거하는것이 아니라.
주석안에 있는 내용까지 함께 제거하는것입니다.
abcd{abcd}abcd
=> abcdabcd
이러한 식으로 제거하고 싶습니다.
컴파일할때 가장 먼저하는 작업인걸로 알고있습니다.
여하튼 답변은 감사합니다.
아래와 같은식으로 해보세요... 지금 델파이가 없어서 코딩이 정확히 되어 있는가는 확인이 안되는데 주석읽어보시면서 님께서 다시 코딩하시면 잘될겁니다.
일단 님께서 이해만 하시면 나머지 부분은 쉬울겁니다...
var
I, P, PS, PE: Integer;
begin
// / ~ / 주석 삭제
for I := 0 to Memo1.Lines.Count - 1 do // 모든 줄을 돌면서 //부터 줄끝까지 삭제
begin
P := Pos(Memo1.Lines[I], '//');
if (P <> 0) then
begin
// 주석아닌 부분만 카피
Memo1.Lines[I] := Copy(Memo1.Lines[I], 1, P - 1);
// = 주석인 부분만 삭제
// = Delete(Memo1.Lines[I], P+1, Length(Memo1.Lines[I]) - P);
end;
end;
// { ~ } 주석 삭제
// { ~ } 는 여러줄에 걸쳐서 있을 수 있으므로 Lines대신에 Text속성을 이용.
repeat
PS := Pos(Memo1.Text, '{'); // { 찾기
if (PS <> 0) then
begin
PE := Pos(Momo1.Text, '}'); // } 찾기
if (PE = 0) then // } 없으면 문장의 끝까지 주석으로 처리
PE := Length(Memo1.Text); // from PE to end of Text => comment
Delete(Memo1.Text, PS, PE - PS - 1); // PS부터 PE까지 삭제
end;
until PS <> 0; // {로 시작되는 주석이 없을때까지...
end;
StringReplace 라는 함수가 있습니다.
이곳에서 '{' 를 ''로, '//' 를 ''로 바꾸시면되겠죠.
예로..
Tmemo 로 파일을 읽어드려,
첨부터 끝까지 루프든 뭐든 돌려서 StringReplace함수로 쏵 바꾸면 되겠죠.
그럼 수고.