【问题标题】:Delphi: Easiest way to search for string in memorystreamDelphi:在内存流中搜索字符串的最简单方法
【发布时间】:2013-04-11 13:54:51
【问题描述】:

在内存流(和多个字符串)中搜索字符串并返回真或假的最简单方法是什么?

【问题讨论】:

  • 使用例如Pos 函数和这个 piece of code.
  • 首先修复它们以具有相同的编码或字符集。相同的字符串值在 UTF-8、UTF-16 和非 Unicode 编码中提供了截然不同的字节值 (TMemoryStream)。
  • 你问的是在“多个字符串”中搜索一个字符串还是在一个内存流中搜索“多个字符串”?

标签: delphi delphi-xe2 pascal memorystream delphi-xe3


【解决方案1】:
var ms:TMemoryStream;
    strS:TStringStream;
    aStr:string;
    aPos:integer;
    found:boolean;
begin
    ms:=TMemoryStream.Create;
    ms.LoadFromFile('c:\aFile.txt');
    strS:=TStringStream.Create;
    strS.LoadFromStream(ms);
    aPos:=pos(aStr,strS.dataString);
    found:=aPos>0;
end;

TStringStream 是一个经常被遗忘但非常有用的工具 - 比使用 pChars 等更容易、更安全。

对于多个搜索,要么使用 pos、substring 等进行 ackwardly 循环,要么使用 RegEx。

此代码在 Delphi XE 中运行良好,尽管 TStringStream 非常旧 - 不确定它是否兼容 unicode。

(示例有漏洞 - 为了简洁起见,我省略了最终代码)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 2010-09-17
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
相关资源
最近更新 更多