darkst11[退格]23[TAB]mybr111[退格][退格][退格]121[退格][退格]23[Enter]怎样把这部分数据整理成开始:darkst123
结束:mybr123

解决方案 »

  1.   

    退格就是删除前一个
    tab就是分割符
      

  2.   


    var
      str:string;
      intpos:integer;
    begin
      str := 'darkst11[退格]23[TAB]mybr111[退格][退格][退格]121[退格][退格]23[Enter] ';
      while Pos('[退格]',str)> 0 do
      begin
        intpos :=  Pos('[退格]',str);
        Delete(str,intpos-1,7);  end;
      str := StringReplace(str,'[Enter]','',[rfReplaceAll]);  ShowMessage(str);
    end;
      

  3.   

    [TAB]我没处理,你自己处理一下,可以用Stringlist来分隔
      

  4.   

    const
      Data = 'darkst11' + Char(VK_BACK) + '23' + Char(VK_TAB) + 'mybr111'+
             Char(VK_BACK) + Char(VK_BACK) + Char(VK_BACK) + '121'+
             Char(VK_BACK) + Char(VK_BACK) + '23' + Char(VK_RETURN);//处理退格键方法
    function BackHandle(const source: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(Source) do
        if source[I] <> Char(VK_BACK) then Result := Result + source[I]
        else if Length(Result) > 1 then Delete(Result, Length(Result), 1);
    end;//字符串中只有一个TAB键
    procedure TForm1.Button1Click(Sender: TObject);
    var
      aPos: Integer;
      str1, str2: string;
    begin
      aPos := Pos(Char(VK_TAB), Data);
      //处理Tab键分隔
      str1 := Copy(Data, 1, aPos - 1);
      str2 := Copy(Data, aPos + 1, MaxInt);
      //处理退格键
      str1 := '开始: ' + BackHandle(str1);
      str2 := '结束: ' + BackHandle(str2);
      //显示字符串内容
      ShowMessage(str1 + sLineBreak + str2);
    end;//字符串中存在多个TAB键
    procedure TForm1.Button2Click(Sender: TObject);
    var
      I: Integer;
      str: string;
      strList: TStringList;
    begin
      strList := TStringList.Create;
      try
        //按照TAB键分隔到TStringList中
        strList.Text := StringReplace(Data, Char(VK_TAB), sLineBreak, [rfReplaceAll]);
        //遍历,进行每行的VK_BACK处理
        for I := 0 to strList.Count - 1 do
        begin
          str := strList.Strings[I];
          if Trim(str) = '' then Continue;
          strList.Strings[I] := BackHandle(str);
        end;
        //显示字符串
        ShowMessage(strList.Text);
      finally
        strList.free;
      end;
    end;
      

  5.   

    我给楼主讲一个思路吧。循环搜索字符串中第一个'【退格】'的位置,并删掉它及它前面的一个字符,直至没有然后找到TAB的位置,截取它前面的字符赋值给第一个变量,截取它后面的字符赋值给第二个变量就可以了。
      

  6.   

    这应该是用键盘HOOK拦截的信息.......
      

  7.   

    [退格]在最终得到的字符串中是看不出的。你是要做‘darkst11[退格]23[TAB]mybr111[退格][退格][退格]121[退格][退格]23[Enter] ’这个字符串,还是得到键盘打出的最后结果?没问清楚。