Q&A

  • 문자열처리
temp := '@a@,@,@b@,@c@,@d@,@@'
이런 유형의 자료가 들었있을때, 'a,','b','c','d',값없음의 결과를 얻고 싶습니다. @@사이의 데이타를 차례로 추출하려구요.
쉬운방법잇으면 알려주세요.

3  COMMENTS
  • Profile
    신동묵 2003.01.25 05:52
    보여주신 자료 대로라면 이렇게 하면 되겠네요.
    원하시는게 이게 맞는것 같은데요... 아닌가요? ^^;

    procedure TForm1.Button1Click(Sender: TObject);
    var
       i,Len : Integer;
       temp, ImsiData, Data : String;
    begin
       temp := '@a@,@,@b@,@c@,@d@,@@';
       Len := Length(temp);
       ImsiData := '';
       for i := 1 to Len do
       begin
          if temp[i] <> '@' then ImsiData := ImsiData + temp[i];
       end;
       ImsiData := ImsiData+',';

       Len := Length(ImsiData);
       Data := '';
       for i:= 1 to Len do
       begin
          if ImsiData[i] = ',' then
          begin
             if Data = '' then Memo1.Lines.Add('Data = 값없음')
             else Memo1.Lines.Add('Data = '+ Data);
                       Data := '';
          end
          else Data := Data + ImsiData[i];
       end;
    end;

  • Profile
    박성훈 2003.01.24 19:57

    밑에 답변하신 분이 다른 답변을 적어 놓으신 것 같아서 적습니다.
    님이 원하시는 것은 문자열파싱입니다. 아랫분은 특정문자로 대체하는 함수를
    올리셨구요. 팁란에 가셔서 '파싱'이란 키워드로 검색해 보세요.
    파싱함수가 몇개 있을겁니다. 참고하세요.
  • Profile
    박장용 2003.01.23 22:54

      temp := StringReplace(temp, '@', '', [rfReplaceAll]);

    만약 델파이 버전 낮아 이 함수가 없으시면 어떳하나 하여
    아래 함수원형을 붙였 합니다..

    function StringReplace(const S, OldPattern, NewPattern: string;
      Flags: TReplaceFlags): string;
    var
      SearchStr, Patt, NewStr: string;
      Offset: Integer;
    begin
      if rfIgnoreCase in Flags then
      begin
        SearchStr := AnsiUpperCase(S);
        Patt := AnsiUpperCase(OldPattern);
      end else
      begin
        SearchStr := S;
        Patt := OldPattern;
      end;
      NewStr := S;
      Result := '';
      while SearchStr <> '' do
      begin
        Offset := AnsiPos(Patt, SearchStr);
        if Offset = 0 then
        begin
          Result := Result + NewStr;
          Break;
        end;
        Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
        NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
        if not (rfReplaceAll in Flags) then
        begin
          Result := Result + NewStr;
          Break;
        end;
        SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
      end;
    end;