« ☆照合順序 COLLATE | トップページ | ■カテゴリーを変更しました。 »

☆検索文字列の分解?

SQLで、複数の単語での検索ができるように、検索文字列を分解するコードを書いてみました。
ここでの検索文字列は、半角及び全角スペースをDelimiterと判断します。" "で括られたものはそのまま空白も取得します。
// 検索文字列Sを分解して、SLに設定します。
// Delimiterは、半角及び全角スペースです。
// ex)コンクリート "床 モルタル鏝押エ" t=
//  下記の3つに分けます。
//  コンクリート
//  床 モルタル鏝押エ
//  t=
function SearchStrPaser(const S: String; var SL: TStringList): Boolean;
var
  P: PChar;
  I, Len: Integer;
  Str: String;
  F: Boolean;
  wc: word;
begin
  try
    SL.Clear;
    Str := '';
    P := PChar(S);
    Len := Length(S);
    F := False;
    I := 1;
    repeat
      if IsDBCSLeadByte(Byte(P^)) then
        begin
          wc := (Byte(P^) shl 8) or Byte((P+1)^);
          if (not F) and (wc = $8140) then
            begin
              SL.Add(Str);
              Str := '';
              Inc(P);
              Inc(I);
            end
          else
            begin
              Str := Str + P^;
              Inc(P);
              Inc(I);
              Str := Str + P^;
            end;
          end
      else if (P^ = #34) then              { #34(") }
        F := not F
      else if (not F) and (P^ = #32) then  { #32(半角スペース) }
        begin
          SL.Add(Str);
          Str := '';
        end
      else
        Str := Str + P^;
      Inc(P);
      Inc(I);
    until I > Len;
    SL.Add(Str);
    Result := True;
  except
    Result := False;
  end;
end;

|

« ☆照合順序 COLLATE | トップページ | ■カテゴリーを変更しました。 »