Delphi Comport回车和换行

时间:2017-03-15 12:23:56

标签: string delphi

我设计了一个小项目,使用ComPort Library 4.10版从Comport读取。当我使用com0com仿真器测试时它工作得很好但是当我从真机读取数据时(它是通过RS232发送数据的电子测试机)数据来自CR和LF,我已经搜索了很多并尝试了所有程序清除CR& LF但失败了。

这是我的代码;

var veri:string;
begin
panel1.Color:=clGreen;
panel1.Caption:='VERİ OKUNUYOR';
veri:=Trim(Str);
memo1.lines.add(CleanupString(trim(veri)));

我试图删除#13,#13#10,#13 +#10,#32,sLineBreak并尝试以下功能;

function CleanupString(S :string) :string;
var
  i :integer;
begin
  Result := S;
  for i := 1 to Length(Result) do
    if Result[i] in [#3..#13] then
      Result[i] := '_';
end;
function RemoveCRLF (const aString : string) : string;
     var  i, j : integer; 
     begin 
     result := aString; 
     j := 0; 
     for i := 1 to Length (result) do 
          begin 
          if (not (result [i] in [#10, #13])) 
          then begin 
               inc (j); 
               result [j] := result [i]; 
               end; 
          end; 
     SetLength (result, j); 
     end;

但到目前为止没有运气,下面的图片显示了我的备忘录内容的样子; enter image description here 设备发送数据以" APSiS0BE"开头并且似乎向每个参数发送CR& LF但我无法在一行中获取数据。

3 个答案:

答案 0 :(得分:2)

我认为你没有看到你相信你所看到的东西。

当你向TMemo添加一行时,你隐式添加一个CR + LF,所以你要删除它们,然后重新添加它们。如果不是,当你在Notepad ++中打开内容时,会有是空的空白行,你没有看到它们。

所以,我认为你成功删除了CR + LF,你只是没有意识到它。

答案 1 :(得分:1)

Delphi具有内置的Trim方法,将删除前导和尾随空格和控制字符(CRLF等)。您的方法将其从字符串中的任何位置删除,但对于RS-232协议,通常只需要Trim {1}}。

也就是说,TMemo.lines.Add方法在备忘录中添加一行...使用CRLF,因此如果您正在检查备忘录输出,它自然会在其中包含行结尾字符。如果没有它,文本将只在一行上继续。

答案 2 :(得分:0)

我也使用ComPort,我使用StringReplace删除CR + LF:

S:= StringReplace(C, sLineBreak, '', [rfReplaceAll]);

StringReplace