Q&A

  • 문자열 처리관련 질문입니다.
변수에 값이 들어있습니다.변수에 들어 있는 값들을 1,2,3,4,7 값만 가져 오려 합니다.
변수에 들어가있는 숫자는 정렬되어 있지 않은것이며, 중복되는 숫자는 한번만 나오게끔 하려 합니다.
어찌해야 가장 효율적일까요?

var
str1,str2,str,aa : string;
i,j:integer;
List1 : TStringList;
temp : Array[0..10] of String;
---------------------------------------------------------
str1:='1,2,3';
str2:='1,2,4,7';
str:=str1+','+str2;

List1 := TStringList.Create;
  TRY
    List1.CommaText := str;
    str := ' ';
    FOR i := 0 to List1.Count -1 do begin
            for j := 0 to list1.Count -1 do begin
               if temp[j] = list1[i] then aa := 'Y';
            end;
            if aa = 'Y' then  begin
               aa := '';
               Continue;
            end;
           str := str + list1[i]+ ',';
           temp[i] := list1[i];
    end;
    edit1.Text := str;

  FINALLY
    List1.Free;
  END;

요런 식으로 처리하면 나오기는 하는데... 넘 지저분 한거 같아서요...

달리 깔끔하게 처리할수 있는 방법좀 부탁드리겠습니다.
1  COMMENTS
  • Profile
    신연근 2004.02.13 17:41


    한번 해봤습니다. 조금 덜 지저분해졌나 몰겠네여.
    stringlist에 중복제거하는 메소드가 있습니다. 아래 참조하세요
    그럼 즐프하세요....

    var
      I: Integer;
      List, List2:TStringList;
      str1,str2,str : STring;
    begin
      str1 := '1,2,3';
      str2 := '1,2,4,7';
      str := str1 + ',' + str2;

      List := TStringList.Create;
      List2 := TStringList.Create;
      List.CommaText := str;
      //이후에 추가되는 문자열중 중복되는 문자열은 제외된다.
      List2.Sorted := true;
      List2.Duplicates:= dupIgnore;

      for I := 0 to List.Count - 1 do    // Iterate
      begin
        List2.Add(List.Strings[I]);
      end;    // for
      showmessage(List2.DelimitedText);

      List.Free;
      List2.Free;
    end;