Q&A

  • 스트링에서 연산을 어떻게?
VC ++ 에서 제공되는 CString 클래스는 많은 메쏘드를 제공합니다.

예를들어 Find(), Trim(), Left(), Right(), ReverseFind()...등등

델파이에서도 이와 유사한 스트링 클래스가 존해하리라 봅니다.

델파이는 제가 잘 안써봐서리..^^

전 특정한 구분자를 하나두고  그 스트링에서 구분자 뒷부분을 자를려고 하거든요

근데 노가다 코딩을 하니깐 깔끔해 보이지 않아서....

전 이걸

그냥

procedure TForm1.Myprocessor(Sender: TObject);
var
S   : String;
S1   : String;
i   : Integer;
begin
S := '테스트 문자;1234567';
          for i := 0 to Length(S) do Begin
            if S[i] = ';' then begin
              S1 := pChar(@S[i+1]);
              break;
            end;
          end;
end;

구분자는 ';'입니다.

이렇게 했습니다.

동작은 잘하는데....

쩝  코드가 계속 길어지네요... 마지막 if 조건문안에서 자른 스트링을 비교할 려고 하는데 S1에서 비고하고 그러면 되는데 다시 또 잘라야 되거든요...

뭐 자르는 함수를 하나 따로 만들면 되지만...

아마 이런 역활을 하는 함수가 있을겁니다.

있는걸 굳이 고생하며 만들필요가 없죠?

가르쳐 주시면 고맙겠습니다.

아참 그리고

델파이 스트링에서는 S[0]에는 길이가 들어간다는데 맞나요?

실 데이타는 S[1] 부터 Length(S)에 존재하나요?

이건 제가 직접 해 봐야 겠군요^^

그리고또 헬프 찾는것도 조금 힘드네요...

String 하고 F1키를 누르면 몇가지 밖엔 없네요..허허

제가 너무 초짭니다.

시간이 나면 수순을 밟아서 공부를 해야 겠지만,,, 시간이 촉박한지라...

감사합니다.

즐프~
4  COMMENTS
  • Profile
    ^ㅡ^ 2004.05.25 03:50
    //답변이 되었으면 합니다.
    일단 님이 원하시는 답이 정확하게 무엇인지 모르겠습니다

    님이 원하는 답이 ; 위치값을 알고 싶은거에요????
    그렇다면 pos(';',s) 이렇게 하면 될꺼구요 저건 integer값을 가지고옵니다
    위치값을....


    S[1] 이건 위치값이 아니고 1번째 값을 의미합니다
    예을들어 s := '23123453'
    s := s[1];
    결과는 2를 가지고오겠죠 첫번
  • Profile
    조준동 2004.05.25 04:18
    String에서는 님이 말씀하신 스트링을 쓰면 될거 같구요

    계속 서치를 하다보니

    TStringList라는 놈이 있더라구요

    그래서 이걸 쓰기로 했습니다.

    사용해 보니깐 원하는 형태로 깔끔하게 처리가 되네요...

    제가 원래 할려고 하는건

    파일을 읽어와서

    파일에있는 한 라인의 내용에 문자를 추출할려고했거든요

    예를 들어

    1234567|45678910

    이렇게 한 라인이 구성되어 있으면

    1234567과 4567890의 두개의 문자열로 분리를 하려고 했었는데...

    구분자 '|'를 찾아서 스트링에서 copy()로 처리해도 되지만,

    TStringList.Delimiter := '|';
    TStringList.DelimitedText := S;//S에는 '1234567|4567890'이 들어 있음

    으로 하니깐 바로 되네요...

    아참 여기서 질문하나

    strList : TStringList;

    로 선언하고

    strList := TStringList.Create();
    초기화 한 다음에

    종료될때
    strList.Free()
    함수를 꼭 호출해야 하나요?

    Create하고
    Free안하면 메모리 릭이 발생합니까?

    Create안하니깐 에러 발생하던데....

    어쨌든 감사합니다.

    오늘도 새로운 내용을 배우고 갑니다. 꾸~벅
  • Profile
    ^ㅡ^ 2004.05.25 21:31
    //답변이 되실지......
    TStringList 이넘을 하나 생성하고 나면 마지막에 FREE를 시켜줘야 합니다.
    그래야 담에 또 생성할
  • Profile
    sarang프돌 2004.05.25 03:40



    안냐세요..저도 VC++하다 델로 포팅할 일이 있어...몇번해보니깐..델파이 넘 편하고 좋아욤...
    구럼..제가 짠 허접 소스를 적어봅니다.
    보시고 놀리지나들 마세욤
    var
    su201_cou_image : string;이고욤.
    그리고 변수 값들은...파일들의 저장 경로입니다.


    for j:=1 to length(su201_cou_image) do
            begin
               k := pos('.',su201_cou_image);  //구분자 '.'입니다.
           if k<>0 then
             begin
            delete(su201_cou_image,k,4);
           end;
    ///여기서 돌고나면...su201_cou_image의 값들이 확장자만 빼고 나머지 경로가 들어갑니다.
    예를들어
    su201_cou_image :=  D:\work\전시 데모\텍스트이미지\test.bmp
    일경우 위의 포문을 돌고나면...
    su201_cou_image :=  D:\work\전시 데모\텍스트이미지\test
    이렇게 됩니다.
    머..이거 보시고...고셔서 사요해보세요.
    저도 허접합니다만..도움이 될듯해서..이렇게 적어봅니다.