Q&A

  • 문자열 처리에 대한 질문 델파이 초짜라...
디비에 문자열이
한 필드에 1,2,3,4,5 이런식으로 들어가 있습니다.

이값들을 가지고 쿼리를 날리려구 합니다.
문자열 처리에 도움을 좀 구합니다.

asp에서는 이런식으로 가능하거든요...

str=1,2,3,4,5
str1 = split(str,",")

For i = Lbound(str1) to Ubound(str1)
      count_co = cint(str1(i))
        
Select 필드 from 테이블
where 코드 = 'count_co'

델파이에서 split  기능을 하는 함수 없을까요~~~~
4  COMMENTS
  • Profile
    KDDG_BaSTaD 2003.05.03 00:48

    ==>  그런식의 ','(콤마)로 구분되는 것은 TStrings.CommaText 로 쉽게 분리됩니다. 이것 말고도.. AnsiReplaceStr() 또는 AnsiReplaceText() 같은 함수로 분리할 수 있습니다.. StrUtils 유닛에 있구요.. Indy를 사용하신다면 IdGlobal 유닛에 Fetch()란 함수도 있습니다...

    직접구현하실수도 있구욤.. 참.. 근데 Replace() 개열의 함수는 주의해서 사용하시기 바랍니다.. (_ _)a 즐프욤
  • Profile
    앙리앙리 2003.05.03 02:00


    제가 초짜라 잘 이해가 가지 않아서요...
    이거 함 봐주세염 틀린부분이 있으면,,, 좀 말해 주세염

    a:= '1,2,3';

       for i:=0 to length(a) do
          begin
          str [i]:= Copy(a, 1, Pos(',' , a) - 1);
          Delete(a, 1, Pos(',', a));
       end;

    end;




  • Profile
    KDDG_BaSTaD 2003.05.03 02:33
    ==>> 컴마 텍스트는 일케 하시면 됩니다.

    var
      I: Integer;
      List: TStringList;
    begin
      // ...

      S := '1,2,3,4,5,6,7,8,9,0';
      List := TStringList.Create;
      TRY
        List.CommaText := S;
        for I := 0 to List.Count - 1 do
          ShowMessage(List[I]);   // 1 ~ 0 까지 10번 팝업..
      FINALLY
        List.Free;
      END;

      // ...
    end;


    ㅁ 참고로 Classes.ExtractStrings() 란 함수도있네요..

    function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;  Strings: TStrings): Integer;

  • Profile
    앙리앙리 2003.05.03 04:41
    답변내용 감사합니다.
    허나 이상하게두 Tlist에 있는 값을 변수에 넣구
    쿼리를 날리고 있는데...
    이상하게두...
    결과값이 자꾸 NULL값이 나오네요...
    소스 함 봐주세요...

    procedure TForm1.Button1Click(Sender: TObject);
    var
    i :integer;
    temp : string;
    compre : string;
    str : string;
    List: TStringList;

    begin
    query1.Close;
       query1.SQL.Clear;
       query1.SQL.Add('select 필드 from 테이블 ');
       query1.SQL.Add('where userid = :a ');
       query1.ParamByName('a').asstring := '하하하';
       query1.Open;
       compre := Query1.FieldByName('필드').asstring;  

      List := TStringList.Create; //리스트 사용

      try
       List.CommaText := compre;
        for i := 0 to List.Count - 1 do
          begin
          temp := List[i];
    ------------------------>>이부분까지 정상적으로 값을 받아옵니다.

          query1.Close;
          query1.SQL.Clear;
          query1.SQL.Add('select * from 테이블');
          query1.SQL.Add('where 필드= ''temp''');  -->요기 말성이네요...
          
         <----------------------------------->
         temp 값에 자꾸 NULL이 들어가네요...
         이하부터를 제대로 값을 받지 못하구 있습니다.
         temp 부분에 값을 직접 넣었을땐 또 되더라구요...
         <----------------------------------->

          query1.Open;
          str:= query1.FieldByName('필드').asstring;
          ShowMessage(str);
          end;
      FINALLY
        List.Free;
      END;