Q&A

  • Length()함수의 리턴값?
RichEdit1.Lines[1]의 길이를 Length()함수로 구하였더니,

다음과 같은 문제가 발생하였습니다.



(1) Line의 끝에 enter키 값이 있을 때와

예) This is a school.(enter) ->RichEdit1.Lines[1]

(2) Line의 끝에 enter키 값이 없이 다음 Line과 연결될 때

예) This is a (여기에는 enter 값이 없음) ->RichEdit1.Lines[1]

school.(여기에서 enter) ->RichEdit1.Lines[2]



위의 예에서 (1) 번의 Line 길이를 Length() 함수로

구하여 'T' 'h' 'i' 등등으로 읽었더니 아무 문제가 없는데,



(2)번의 Line 길이를 (1)번과 같은 방법으로 구하여

읽었더니 라인의 끝에서 "EAccessViolation" 에러가 발생합니다.



라인의 끝에 enter 값이 없을 때 어떤 값이 들어가는지 궁금하고,

EAccessViolation 에러를 어떻게 처리할 수 있는지 궁금합니다.

Length()의 리턴 값이 (1)과 (2)에서 어떻게 차이가 있는지요.



고맙습니다.





2  COMMENTS
  • Profile
    구창민 1999.07.14 18:59
    이정환 께서 말씀하시기를...

    > RichEdit1.Lines[1]의 길이를 Length()함수로 구하였더니,

    > 다음과 같은 문제가 발생하였습니다.

    >

    > (1) Line의 끝에 enter키 값이 있을 때와

    > 예) This is a school.(enter) ->RichEdit1.Lines[1]

    > (2) Line의 끝에 enter키 값이 없이 다음 Line과 연결될 때

    > 예) This is a (여기에는 enter 값이 없음) ->RichEdit1.Lines[1]

    > school.(여기에서 enter) ->RichEdit1.Lines[2]

    >

    > 위의 예에서 (1) 번의 Line 길이를 Length() 함수로

    > 구하여 'T' 'h' 'i' 등등으로 읽었더니 아무 문제가 없는데,

    >

    > (2)번의 Line 길이를 (1)번과 같은 방법으로 구하여

    > 읽었더니 라인의 끝에서 "EAccessViolation" 에러가 발생합니다.

    >

    > 라인의 끝에 enter 값이 없을 때 어떤 값이 들어가는지 궁금하고,

    > EAccessViolation 에러를 어떻게 처리할 수 있는지 궁금합니다.

    > Length()의 리턴 값이 (1)과 (2)에서 어떻게 차이가 있는지요.

    >

    > 고맙습니다.

    >

    >



    이정환님 안녕하세요?

    저는 잘 되는 걸요?

    혹시, RichEdit의 라인이 10 라인이라면

    RichEdit.Lines[10] 이라고 쓰신것은 아닌지요?

    첨자는 0 부터 시작하기 때문에 마지막 라인은 9가 됩니다.

    그리고, 궁금해 하시는 Enter에는 0A0D(16진수)가 들어가게 됩니다.

    라인을 내리고, 컬럼의 가장앞으로 가게하는 제어 문자입니다.



    그리고, 아래처럼 테스트 해보세요.

    procedure TForm1.Button1Click(Sender: TObject);

    var i: integer;

    begin

    for i:= 0 to RichEdit1.Lines.Count -1 do

    ShowMessage( IntToStr(Length(RichEdit1.Lines[i])) );

    end;

    바로 쓴글이라 오타가 있을수 있습니다.

    그럼.. 즐거운 프로그래밍 되세요~

  • Profile
    이정환 1999.07.16 21:55
    말씀하신 대로 하여 보았습니다.

    그랬더니 (1) 라인 끝에서 Enter(0A0D)를 치고 다음 라인으로 바꾼 곳은

    정상으로 IntToStr()값이 리턴되는데,

    (2) 타자할 때, 라인 끝에서 글자가 넘쳐서 자동으로 라인이 바뀐

    곳에서는 "IntToStr()값 +1"이 리턴됩니다. 그래서 혹시 자동으로 라인이

    바뀐 문장의 끝에 나타나는 "+1"값이 nil 또는 space 값인가 하여서

    "if 라인끝=nil then ShowMessage('nil')"

    "if 라인끝=' ' then ShowMessage('space')" 등등으로 테스트하여 보았는데,

    아무 반응이 없습니다.



    (2)의 라인 끝에 어떤 값이 들어가는지 여전히 궁금합니다.



    델파이 초보라서 질문이 서툴러서 죄송합니다. 아래에 제가 라인값이 필요한

    함수를 함께 보냅니다. 혹시 제가 엉터리로 질문한 것이면 코딩을 보시고

    잘못을 지적하여 주세요. 고맙습니다.



    procedure get_c_token();

    var

    firstTokenindex, count: integer; //한 Char씩 읽다가 각 token별로

    //묶기 위한 값을 계산하는 변수

    begin

    T:='';

    t_temp:='';

    c_tokentype:=' ';

    firstTokenindex:=0;

    count:=0;



    //각 line의 끝을 화면에 표시하고 TokenType을 'E'로

    if linelengthindex > length(Linestring)

    then begin

    t:='end(문장이 끝났습니다.)';

    c_tokentype:='E';

    exit;

    end;



    //line의 끝이 아니면 1 Char를 Token으로 얻기

    T:= Copy(linestring, linelengthindex,1);



    //공백 문자를 건너 뛰기

    while T = ' '

    do begin

    inc(linelengthindex);

    T:= Copy(linestring, linelengthindex,1);

    end;



    //숫자를 Token으로 얻기

    if ((T >= '0') and (T <= '9')) then

    begin

    firstTokenindex:= linelengthindex;

    while ((T >= '0') and (T <= '9')) do

    begin

    c_tokentype := 'N';

    inc(linelengthindex);

    inc(count);

    T:= Copy(linestring, linelengthindex,1);

    end;

    T:= Copy(linestring, firstTokenindex, count);

    end



    //한글을 Token으로 얻기

    else if IsDBCSLeadByte(byte(linestring[linelengthindex]))

    then

    begin

    firstTokenindex:= linelengthindex;

    while

    IsDBCSLeadByte(byte(linestring[linelengthindex])) do

    begin

    c_tokentype := 'H';

    T:= Copy(linestring, linelengthindex,2);

    inc(linelengthindex);

    inc(count);

    inc(count);

    if

    IsDBCSLeadByte(byte(linestring[linelengthindex])) then

    inc(linelengthindex);

    end;

    T:= Copy(linestring, firstTokenindex, count);

    end



    //한글도 숫자도 아니면 아래 부분을 처리

    else begin

    inc(linelengthindex);

    //이 부근에서 EAccessViolation 에러가 발생하는 것으로 추정

    c_toKentype := T[1];

    end;



    end;





    답해주셔서 거듭 고맙습니다. 위의 코딩을 보시고 문제가 발견되면 좋겠습니다.

    저는 프로그램에는 아마추어이고, 어쩌다가 우리말을 공부한 바가 있어서

    "우리말 문법분석기"를 만드는데에 관심이 있습니다.



    시간이 있으시면 다시 답해주시고, 혹시 잘못한 점이 있으면 지적해 주시면

    좋겠습니다.



    고맙습니다.



    이정환 드림.



    구창민 께서 말씀하시기를...

    > 이정환 께서 말씀하시기를...

    > > RichEdit1.Lines[1]의 길이를 Length()함수로 구하였더니,

    > > 다음과 같은 문제가 발생하였습니다.

    > >

    > > (1) Line의 끝에 enter키 값이 있을 때와

    > > 예) This is a school.(enter) ->RichEdit1.Lines[1]

    > > (2) Line의 끝에 enter키 값이 없이 다음 Line과 연결될 때

    > > 예) This is a (여기에는 enter 값이 없음) ->RichEdit1.Lines[1]

    > > school.(여기에서 enter) ->RichEdit1.Lines[2]

    > >

    > > 위의 예에서 (1) 번의 Line 길이를 Length() 함수로

    > > 구하여 'T' 'h' 'i' 등등으로 읽었더니 아무 문제가 없는데,

    > >

    > > (2)번의 Line 길이를 (1)번과 같은 방법으로 구하여

    > > 읽었더니 라인의 끝에서 "EAccessViolation" 에러가 발생합니다.

    > >

    > > 라인의 끝에 enter 값이 없을 때 어떤 값이 들어가는지 궁금하고,

    > > EAccessViolation 에러를 어떻게 처리할 수 있는지 궁금합니다.

    > > Length()의 리턴 값이 (1)과 (2)에서 어떻게 차이가 있는지요.

    > >

    > > 고맙습니다.

    > >

    > >

    >

    > 이정환님 안녕하세요?

    > 저는 잘 되는 걸요?

    > 혹시, RichEdit의 라인이 10 라인이라면

    > RichEdit.Lines[10] 이라고 쓰신것은 아닌지요?

    > 첨자는 0 부터 시작하기 때문에 마지막 라인은 9가 됩니다.

    > 그리고, 궁금해 하시는 Enter에는 0A0D(16진수)가 들어가게 됩니다.

    > 라인을 내리고, 컬럼의 가장앞으로 가게하는 제어 문자입니다.

    >

    > 그리고, 아래처럼 테스트 해보세요.

    > procedure TForm1.Button1Click(Sender: TObject);

    > var i: integer;

    > begin

    > for i:= 0 to RichEdit1.Lines.Count -1 do

    > ShowMessage( IntToStr(Length(RichEdit1.Lines[i])) );

    > end;

    > 바로 쓴글이라 오타가 있을수 있습니다.

    > 그럼.. 즐거운 프로그래밍 되세요~





    • 서경철
    • 1999.07.14 22:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김도완
      1999.05.03 10:21
      안녕하세요? 프린터에 대해서 궁금한게 있어서 질문을 드림니다. 프린터 출력할때 출력을 사용자설정에서...
    • 안치봉
      1999.05.03 18:14
      김도완 wrote: > 안녕하세요? > 프린터에 대해서 궁금한게 있어서 질문을 드림니다. > 프린터 출력할때 ...
    • 박홍석
    • 1999.07.14 21:27
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.01 20:56
      DLL에서 Main application의 Ttreeview componet의 하위노드를 생성하고 싶습니다.... Main applicatio...
    • 류성호
      1999.07.14 22:32
      박홍석 께서 말씀하시기를... > 안녕하세요. > > 델파이에서 마우스로 컨트롤을 드래그(마우스 왼쪽버...
    • 안치봉
      1999.05.03 18:08
      왕초보 wrote: > DLL에서 Main application의 Ttreeview componet의 하위노드를 생성하고 > 싶습니다.......
    • 김도완
    • 1999.05.03 10:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이일수
      1999.07.14 21:08
      안녕하세요! 오늘도 무척이나 덥군요! 장마라더니 비는 안오고 왜 이렇게 무더운지... 보통 화상회...
    • 안치봉
      1999.05.03 18:14
      김도완 wrote: > 안녕하세요? > 프린터에 대해서 궁금한게 있어서 질문을 드림니다. > 프린터 출력할때 ...
    • 황하성
    • 1999.07.14 20:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황하성
      1999.07.15 17:29
      황하성 께서 말씀하시기를... > > 안녕하세요... > 초보적인 DB 질문인데 잘 몰라서 질문 올립니다... ...
    • 정재홍
      1999.07.14 22:31
      황하성 께서 말씀하시기를... > > 안녕하세요... > 초보적인 DB 질문인데 잘 몰라서 질문 올립니다... ...
    • 솔잎
      1999.07.14 20:23
      저는 데이타모듈에 데이타베이슬 두고서..알리아스를 관리했거든요. 그리고..name에서..키가 맞으면...dbe...
    • 신호성
      1999.05.01 17:34
      김성희 wrote: > DB는 DBase fo Window를 사용하고요... > 디비의 mname이라는 필드에 내용을 ListBox에 ...
    • 김성희
      1999.05.02 08:54
      > 안녕하세요? > 신호성 입니다. > > Table의 특정 Column을 ListBox에 넣고싶은 거죠? > Column값의 ...
    • 신호성
      1999.05.03 09:31
      > 답변 잘 보았습니다. > 쿼리사용하지않고... 테이블로만할수 없나요? > 제컴이 이상한건지(컴 사양이 ...
    • 김성희
      1999.05.03 22:17
      제 질문에 답변 해주신점 감사드립니다. 그럼, 행복하세요...
    • 이현신
    • 1999.07.14 19:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신규찬
      1999.05.03 09:24
      델파이로 프로그램을 하다가 개인적인 사정으로 비주얼 베이직을 하게 되었습니다. 비주얼 베이직을 쓰다...
    • camplus
      1999.07.15 01:33
      좋은 방법은 아니지만,, 처음 실행시에 IP를 기록합니다. INI나. 레지스트리에.. 그리고 나서, 다음에 실...
    • 안명호
    • 1999.05.02 23:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.03 03:39
      먼저 WinSight라는 델파이에 포함된 유틸을 사용할 줄 아시면 도움이 될것입니다. 먼저 도스창을 FindWi...
    • 안명호
      1999.05.03 07:08
      감사합니다. 이정욱님! 많은 도움이 될것 같군요... 한가지 궁금한게 더 있습니다. 이정욱님 말씀데로 W...
    • 이정환
    • 1999.07.14 18:30
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.07.14 18:59
      이정환 께서 말씀하시기를... > RichEdit1.Lines[1]의 길이를 Length()함수로 구하였더니, > 다음과 같은...
    • 이정환
      1999.07.16 21:55
      말씀하신 대로 하여 보았습니다. 그랬더니 (1) 라인 끝에서 Enter(0A0D)를 치고 다음 라인으로 바꾼 곳은...
    • 안명호
    • 1999.05.02 23:09
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 디제이
      1999.07.14 18:29
      자료실 어디선가 보니 리소스에 Wav파일을 넣어, 함께 컴파일하여 별도의 Wav파일 없이 프로그램 자체...
    • 이정욱
      1999.05.03 03:39
      먼저 WinSight라는 델파이에 포함된 유틸을 사용할 줄 아시면 도움이 될것입니다. 먼저 도스창을 FindWi...
    • 이정욱
      1999.07.14 19:25
      RC파일(텍스트)을 만들어서 델파이와 같이있는 BRCC32를 가지고 리소스컴파일을 하면 RES라는 컴파일된 리...
    • 안명호
      1999.05.03 07:08
      감사합니다. 이정욱님! 많은 도움이 될것 같군요... 한가지 궁금한게 더 있습니다. 이정욱님 말씀데로 W...
    • 김종성
    • 1999.07.14 17:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 노력하는이
      1999.07.14 18:23
      김종성 께서 말씀하시기를... > 도움말 파일을 만들려고 합니다. > 아시죠? 프로그램 실행 도중에 F1키를...
    • 안명호
    • 1999.05.02 23:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.03 03:39
      먼저 WinSight라는 델파이에 포함된 유틸을 사용할 줄 아시면 도움이 될것입니다. 먼저 도스창을 FindWi...
    • 안명호
      1999.05.03 07:08
      감사합니다. 이정욱님! 많은 도움이 될것 같군요... 한가지 궁금한게 더 있습니다. 이정욱님 말씀데로 W...
    • 방기남
    • 1999.05.02 21:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      1999.07.14 11:05
      안녕하세요 Delphi4.0으로 Paradox DataBase를 이용한 간단한 어플리케이션을 만들어 보았습니다. 그런데...
    • 이정욱
      1999.05.04 06:46
      삼각형Press에서 나온 Delphi Client/Server Developers Guide를 추천합니다. 저도 이것을 보면서 개념을 ...
    • 류성호
      1999.07.14 22:09
      이현철 께서 말씀하시기를... > 안녕하세요 Delphi4.0으로 Paradox DataBase를 이용한 간단한 어플리케이...
    • camplus
    • 1999.07.14 09:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • camplus
      1999.07.14 19:30
      제가 질문하고 제가 쓰네요.. 혹시 필요한 분이 계실지 몰라서 Vendor Init파일이 두개가 필요하네요 N...
    • 신호성
      1999.05.01 17:34
      김성희 wrote: > DB는 DBase fo Window를 사용하고요... > 디비의 mname이라는 필드에 내용을 ListBox에 ...
    • 김성희
      1999.05.02 08:54
      > 안녕하세요? > 신호성 입니다. > > Table의 특정 Column을 ListBox에 넣고싶은 거죠? > Column값의 ...
    • 신호성
      1999.05.03 09:31
      > 답변 잘 보았습니다. > 쿼리사용하지않고... 테이블로만할수 없나요? > 제컴이 이상한건지(컴 사양이 ...
    • 김성희
      1999.05.03 22:17
      제 질문에 답변 해주신점 감사드립니다. 그럼, 행복하세요...
    • 이용일
      1999.07.14 08:23
      var Tstr : TStrings; begin Tstr := TStrings.Create; 이렇게 해서..실행시켰더니.. Project ...
    • 안치봉
      1999.05.03 18:08
      왕초보 wrote: > DLL에서 Main application의 Ttreeview componet의 하위노드를 생성하고 > 싶습니다.......
    • 노력하는이
      1999.07.14 18:46
      이용일 께서 말씀하시기를... > var > Tstr : TStrings; > begin > Tstr := TStrings.Create; > ...
    • 이정욱
      1999.07.14 13:55
      전 잘되는데요? 전체코드안에 문제가 있는것 같네요... 그리고 TStrings보다는 TStringList를 사용...
    • 구상도
    • 1999.05.01 20:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.01 20:56
      MediaPlayer의 AutoOpen을 프로퍼티 인스펙터에서(디자인시) False로 주세요. 그리고 이렇게 해보세요. ...
    • yjm
    • 1999.07.14 06:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조복기
      1999.07.14 19:07
      안녕하세요..조복기입니다. 예전에 bcp를 사용해서 데이타를 올리고 내리는작업은 했었는데 델파이에...
    • 구상도
    • 1999.05.01 20:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.01 20:56
      MediaPlayer의 AutoOpen을 프로퍼티 인스펙터에서(디자인시) False로 주세요. 그리고 이렇게 해보세요. ...