線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3200
推到 Plurk!
推到 Facebook!

字串陣列中,跳脫> = <等符號

答題得分者是:jimmy_wei
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-08 14:11:10 IP:163.28.xxx.xxx 未訂閱
各位高手    小弟設計了一個字串陣列,裡面包括了:>=79.89 <89.70目前小弟,想要取的是 s:=79.89, s1:=89.70, 又因為>=和數字的長度,不一定,所以無法使用midstr 和其他字串方法 去精準控制,只讀取數字的部份,有時都會把> = <等符號讀入字串中,這樣在做比對時,會出錯,所以想只讀取數字的部份,而把>=,<的符號跳過 耐的住被人磨,則會像鑽石一樣發光
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 14:37:44 IP:210.243.xxx.xxx 未訂閱
那你就先打字串中的特殊符號拿掉呀... str:= StringReplace(Str1, '>', '', [rfReplaceAll]); str:= StringReplace(Str1, '<', '', [rfReplaceAll]); str:= StringReplace(Str1, '=', '', [rfReplaceAll]); 你可以在取出資料後把這些資料拿掉 或是在取前拿掉都可以.... 看需求 試試
goodjimmy
一般會員


發表:20
回覆:26
積分:9
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-08 15:20:59 IP:163.28.xxx.xxx 未訂閱
wei大大 您解決了其中之一的問題,另外一個問題是,如果我的數字長度是變動的,該如何讀取呢? ex: 89.01 89.1 89 這個無法用leftstr的方式讀固定位子,會造成程式無法運作 耐的住被人磨,則會像鑽石一樣發光
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-08 16:16:53 IP:210.243.xxx.xxx 未訂閱
你好: 你的資料和資料間是不是用空白隔開,如果是你就可以用 sList: TStringList; sList.Text:= StringReplace(Str1, '>', #13#10, [rfReplaceAll]); 再來就抓資料來用就好了
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-08 17:35:37 IP:61.66.xxx.xxx 未訂閱
1.可以先將特殊符號取代為空字串 2.再將此字串左右空白去除 3.將字串轉換為數值 str:= StringReplace(str, '>', '', [rfReplaceAll]); str:= StringReplace(str, '<', '', [rfReplaceAll]); str:= StringReplace(str, '=', '', [rfReplaceAll]); str:= Trim(str); value:= StrToFloat(str);
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-08 19:00:14 IP:203.69.xxx.xxx 未訂閱
const   //DEFAULT_DELIMITERS = [' ', #9, #10, #13];   DEFAULT_DELIMITERS = [' ', '>', '<', '='];    
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;      function GetToken(const S: string; index: Integer; bTrail: Boolean = False; Delimiters: TSysCharSet = DEFAULT_DELIMITERS): string;
  function GetToken2(const S: string; index: Integer; bTrail: Boolean = False; Delimiters: TSysCharSet = DEFAULT_DELIMITERS): string;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
  sStr: String;
begin
  sStr := '>=79.8933 <89.70';      ShowMessage(GetToken(sStr,0)); // 全部字串
  ShowMessage(GetToken(sStr,1)); // 79.8933
  ShowMessage(GetToken(sStr,2)); // 89.70      ShowMessage(GetToken2(sStr,0)); // 全部字串
  ShowMessage(GetToken2(sStr,1)); // '>' 及 '=' 中間的空字串
  ShowMessage(GetToken2(sStr,2)); // 79.8933
  ShowMessage(GetToken2(sStr,3)); // ' ' 及 '<' 中間的空字串
  ShowMessage(GetToken2(sStr,4)); // 89.70
end;    function GetToken(const S: string; index: Integer; bTrail: Boolean = False; Delimiters: TSysCharSet = DEFAULT_DELIMITERS): string;
var
  I, W, head, tail: Integer;
  bInWord         : Boolean;
begin
  I := 1;
  W := 0;
  bInWord := False;
  head := 1;
  tail := Length(S);
  while (I <= Length(S)) and (W <= index) do
  begin
    if S[I] in Delimiters then
    begin
      if (W = index) and bInWord then tail := I - 1;
      bInWord := False;
    end else
    begin
      if not bInWord then
      begin
        bInWord := True;
        Inc(W);
        if W = index then head := I;
      end;
    end;        Inc(I);
  end;      if bTrail then tail := Length(S);
  if W >= index then Result := Copy(S, head, tail - head   1)
  else Result := '';
end;    function GetToken2(const S: string; index: Integer; bTrail: Boolean = False; Delimiters: TSysCharSet = DEFAULT_DELIMITERS): string;
var
  I, W, head, tail: Integer;
  bInWord         : Boolean;
  bPreDelimiters  : Boolean;
  bIsDelimiters   : Boolean;
begin
  I := 1;
  W := 0;
  bInWord := False;
  head := 1;
  tail := Length(S);
  bPreDelimiters := False;
  while (I <= Length(S)) and (W <= index) do
  begin
    bIsDelimiters := (S[I] in Delimiters);
    if bIsDelimiters and (bPreDelimiters) then
    begin
      Inc(W);
      if W=index then
      begin
        head := I-1;
        tail := I-2;
        break;
      end;
    end
    else
    begin
      if bIsDelimiters then
      begin
        if (W = index) and bInWord then tail := I - 1;
        bInWord := False;
      end else
      begin
        if not bInWord then
        begin
          bInWord := True;
          Inc(W);
          if W = index then head := I;
        end;
      end;
    end;
    bPreDelimiters := (S[I] in Delimiters);
    Inc(I);
  end;      if bTrail then tail := Length(S);
  if W >= index then Result := Copy(S, head, tail - head   1)
  else Result := '';
end;
用用看 GetToken: 會跳脫分隔字元取出元素 GetToken2: 會依分隔字元(DEFAULT_DELIMITERS)設定取出字串包括空字串
系統時間:2024-03-29 15:25:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!