Q&A

  • 문자열에서 문자를 추출할려거든요.
쉬운것같으면서도 안되네요.

예를들어
TmpStr:="12345 ABCD 6 789 EF 한글나라"

TmpStr를 이렇게 넣고 싶거든요 (빈칸으로 구분된 것을 따로따로)
   '12345'  --> TmpS[0]
   'ABCD' --> TmpS[1]
   '6'        --> TmpS[2]
   '789'     --> TmpS[3]
   'EF'      --> TmpS[4]

좀 갈르쳐 주세요. copy문과 pos문을 짬뽕으로 쓰보았는데
잘안되네요. 미치겠습니다.
5  COMMENTS
  • Profile
    고지범 2002.09.17 23:14
    procedure TForm1.Button2Click(Sender: TObject);
    var
       strData :string;
    begin
       strData := '12345 ABCD 6 789 EF 한글나라';
       ListBox1.Clear;
       ExtractStrings([' '], [' '], PChar(strData), ListBox1.Items );
       // ListBox1 안에 적당히 들어가 있음...
    end;

    또는
    procedure TForm1.Button2Click(Sender: TObject);
    var
       tempList :TStringList;
       strData :string;
    begin
       strData := '12345 ABCD 6 789 EF 한글나라';
       tempList := TStringList.Create();
       ExtractStrings([' '], [' '], PChar(strData), tempList );
       // tempList 안에 들어 있으므로... 작업 하구난 다음....
       // ...
       FreeAndNil(tempList);
    end;

  • Profile
    KDDG_ZZOM 2002.09.17 23:49
    .
  • Profile
    바다를향해 2002.09.17 22:11
    function SubStr(Str:string;const Position:integer;const Delimiter:string=','):string;
    var
      Strlen,ZIdx,SIdx,CPos:integer;
    begin
      Result:='';
      Str:=Str+Delimiter;
      StrLen:=Length(Str);
      ZIdx:=1;
      SIdx:=1;
      while ZIdx<=StrLen do begin
        CPos:=Pos(Delimiter,Str);
        if CPos<>0 then begin
          if SIdx=Position then begin
            result:=Copy(Str,1,CPos-1);
            break;
          end;
          delete(Str,1,CPos);
          inc(SIdx);
        end;
        inc(ZIdx);
      end;
    end;

    위 함수의 사용법은
    var
       str1: String;
       str2: Array of String;
    begin
       str1 := '12345 ABCD 6 789 EF 한글나라';

       setlength(str2, 6);
       str2[0] := substr(str1, 1, ' ');   // ----> 12345
       str2[1] := substr(str1, 2, ' ');   // ----> ABCD
       str2[2] := substr(str1, 3, ' ');   // ----> 6
       str2[3] := substr(str1, 4, ' ');   // ----> 789
       str2[4] := substr(str1, 5, ' ');   // ----> EF
       str2[5] := substr(str1, 6, ' ');   // ----> 한글나라
    end;

    유용하게 쓰세여...^^;;;;

  • Profile
    KDDG_ZZOM 2002.09.17 21:14
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      TmpStr : String;
      i      : Integer;
    begin
      TmpStr := '12345 ABCD 6 789 EF 한글나라';
      while Pos(' ', TmpStr) > 0 do
      begin
        i := Pos(' ', TmpStr);
        ListBox1.Items.Add(Copy(TmpStr,1, i - 1));
        TmpStr  := Copy(TmpStr, I + 1, Length(TmpStr));
      end;
      ListBox1.Items.Add(TmpStr);
    end;

    리스트박스를 TStringList로 사용하면될것같네요...

    즐프하세요...

  • Profile
    하병준 2002.09.17 21:11

    type
      TMyList = array[0..4] of String;
    var
      index : Integer;
      TmpStr : String;
      myList : TMylist;
    begin
      TmpStr:='12345 ABCD 6 789 EF 한글나라';

      while True do begin
        index := pos(' ' , TmpStr);
        if index > 0 then begin
          if myList[0] = '' then
            myList[0] := copy(TmpStr, 0, index)
         else if myList[1] = '' then
           myList[1] := copy(TmpStr, 0, index)
         else if myList[2] = '' then
           myList[2] := copy(TmpStr, 0, index)
         else if myList[3] = '' then
           myList[3] := copy(TmpStr, 0, index)
         else if myList[4] = '' then
           myList[4] := copy(TmpStr, 0, index);
          TmpStr := copy(TmpStr, index+1, length(TmpStr));
        end else
          break;
      end;

    end;

    쉬운 부분이라 설명은 ... 생략