StringReplace 的二进制版本

2024-02-10

我正在尝试在保存大量数据的 RawByteString 上运行 AnsiStrings.StringReplace,其中一些数据需要替换。它会起作用,除了在 StringReplace 内部它将我的字符串转换为 PAnsiChar,因此搜索一旦到达 blob 内的第一个 #0 字节就会结束。

我正在寻找一个与 StringReplace 类似的例程,但可以安全地在可能包含空字节的 blob 上使用。有人知道其中一个吗?


我猜 StringReplace 中的“违规”函数是 AnsiPos->AnsiStrPos

所以...我想缺少一个已经有效的解决方案,我会复制/粘贴 StringReplace 代码并将 AnsiPos 更改为其他内容。 (即 AnsiStrings.PosEx)

function RawByteStringReplace(const S, OldPattern, NewPattern: AnsiString;
  Flags: TReplaceFlags): AnsiString;
var
  SearchStr, Patt, NewStr: AnsiString;
  Offset: Integer;
begin
  //Removed the uppercase part...
  SearchStr := S;
  Patt := OldPattern;

  NewStr := S;
  Result := '';
  while SearchStr <> '' do
  begin
    Offset := AnsiStrings.PosEx(Patt, SearchStr);
    if Offset = 0 then
    begin
      Result := Result + NewStr;
      Break;
    end;
    Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
    NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
    if not (rfReplaceAll in Flags) then
    begin
      Result := Result + NewStr;
      Break;
    end;
    SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

StringReplace 的二进制版本 的相关文章

  • 在 Delphi 中,我的 DLL 中是否必须分配函数的返回 pchar

    我有一个 DLL 其中有一个返回 pchar 的函数 以避免必须使用 borlndmm 我最初所做的是将字符串转换为 pchar 并返回 Result pChar SomeFuncThatReturnsString 但 90 的情况下我都能
  • 使用 gmail 和 Indy 发送电子邮件

    我正在尝试使用 gmail 从 Delphi 发送电子邮件 我有 Indy 10 5 9 0 和 Delphi XE3 我从以下位置获得了示例代码 http www andrecelestino com delphi xe envio de
  • Delphi RTTI,已发布的属性出现两次

    我想对属性使用属性 但这些属性偶尔会在继承的类中发生更改 这是一个示例代码 非常简化 TBaseClass class TObject private FFoo string published BaseAttirib hello prop
  • Delphi 如何与 Active Directory 集成?

    我们需要使用 Delphi 7 验证 Microsoft Active Directory 上的用户 最好的方法是什么 我们可以有两种情况 用户输入其网络用户名和密码 其中用户名可能包括域 然后我们检查活动目录是否是有效的活动用户 或者我们
  • 无法通过Delphi替换Word应用程序中的页脚文本

    我正在尝试替换页脚中的文本 我使用以下代码 通过它我可以替换正常内容 正文 但不能替换页脚 页眉中的内容 myWinWordApp CreateOLEObject Word Application myWinWordApp visible
  • Delphi错误数据集未处于插入或编辑模式

    客观的 单击 TRxDBCombo 上的按钮调用搜索框 从搜索框中选择记录时 结果将设置为 TComboEditBox 的字段值 并发布在 TRxMemoryData 数据集中 错误 第二次调用此函数时出现数据集未处于插入或编辑模式 TDB
  • vcl组合框并不总是显示它有焦点

    当我从另一个控件切换到组合框时 它会显示文本周围带有虚线的框 但是当我以编程方式将控件设置为活动状态时 它不会显示相同的焦点指示器 这种行为有解决方法吗 我有德尔福XE6 MCVE unit Unit27 interface uses Wi
  • delphi定时器比定时器服务中断例程更快

    大家好 我被要求为某人维护一个基于 Delphi 5 的程序 该程序使用一个计时器对象每 50 毫秒计时一次 并且在每次计时结束时运行单线程代码块 我只是想知道 如果执行这段代码所花费的时间比计时器滴答间隔长 会发生什么 这会很糟糕吗 例如
  • 将字符串中的一个字符替换为另一个字符

    我有如下数据 A B C D 我想更换C与数据 例如 Z 这样它可能看起来像 A B Z D 我该怎么做 SUBSTITUTE A1 C Z 虽然我不清楚你是否想要G or Z 你提到G但你的示例输出显示Z
  • jquery 删除 标签,同时保留其内容(并用
    替换

    :s)

    有没有一种好方法可以删除所有 SPAN 标签 同时保留其中的文本 并用 BR 替换所有 DIV 和 P 使用 jQuery div p Lorem ipsum dolor sit amet consectetur adipiscing el
  • 在运行时创建 TQReport 元素

    在运行时创建 TQReport 元素 嗯 至少尝试一下 我不知道这份报告中应出现哪些标题或数据 我得到一个代表数据行和列的 TString 的 TList 我在组的带打印事件中植入 创建 指令 并在主数据行带的 OnNeedData 事件中
  • 需要在 javascript 中对 ajax 查询进行正确的修剪吗?

    在 JavaScript 中 我想对字符串末尾的所有特殊字符进行正确的修剪 我的一段代码仅对连字符 进行修剪 还需要所有特殊字符 var s DB var x s replace console log x 对此有什么帮助吗 这应该可以解决
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 OSX 上的应用程序名称下创建子项菜单?

    如何在下面添加TMenuItemProject1以上Quit在下面的屏幕截图上 我创建了一个 TMenuBar 并选中了 UseOSMenu 属性 我添加的第一个 TMenuItem 是主栏中的第二个 TMenuItem 您可以通过将 II
  • 强制 Liquibase 将 Blob 映射到 PostgreSQL 上的 BYTEA

    如何告诉 Liquibase 将 BLOB 数据类型映射到 PostgreSQL 上的 BYTEA 看来 Hibernate 人们已经接管并调整了该工具以满足他们的需求 https liquibase jira com browse COR
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • 如何仅在调试模式下激活 ReportMemoryLeaksOnShutdown?

    我需要激活ReportMemoryLeaksOnShutdown报告应用程序内存泄漏的功能 但仅限于调试模式 当 Delphi IDE 运行时 我怎样才能做到这一点 如果您的意思是使用调试构建配置 D2007 编译的 调试模式 则您将定义
  • docx 模板 Docx4j 替换 Java 中的文本

    我是 Docx4j 的新手 我的任务是替换 docx 模板的一些文本 我阅读了 docx4j 的入门指南 但我认为我没有完全理解整个概念 好吧 无论如何 我已经尝试过 Docx4j 的解压模板 1 它与给定的 docx 配合得很好 但是当我
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume

随机推荐

  • java.util.Date 和 XMLGregorianCalendar 之间的简单转换

    我正在寻找一种在 java util Date 和 javax xml datatype XMLGregorianCalendar 之间双向转换的简单方法 这是我现在使用的代码 import java util GregorianCalen
  • Google App Engine 支持 C++ 吗? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions App E
  • 如何让 PEX 自动生成单元测试?

    如何让 PEX 在 Visual Studio 2013 中自动生成单元测试 我可以在 Visual Studio 2010 中使用 PEX 自动生成单元测试 并且通过右键单击函数体找到菜单 我们没有发布 Visual Studio 201
  • 在 OS X Lion 中,LANG 未设置为 UTF-8,如何修复?

    我尝试在 OS X Lion 中设置 postgres 发现没有正确设置 LOCALE 环境变量 这是设置的 LANG LC COLLATE C LC CTYPE C LC MESSAGES C LC MONETARY C LC NUMER
  • 如何设置整数的前三个字节?在 C++ 中

    我想在 C 中将整数的前三个字节设置为 0 我尝试了这段代码 但是我的整数变量a没有改变 输出始终是 63 我究竟做错了什么 include
  • TensorFlow“py_func”的输出具有未知的等级/形状

    我正在尝试在 TensorFlow 中创建一个简单的神经网络 唯一棘手的部分是我有一个我已经实现的自定义操作py func 当我传递输出时py func to a Dense层 TensorFlow 抱怨排名应该是已知的 具体错误是 Val
  • 如何让 WKWebView 在 swift 和 macOS 应用程序中快速工作[重复]

    这个问题在这里已经有答案了 在这个 get 因重复而被击落之前 它不是 这里关于 WKWebView 的几乎每个问题都是关于 iOS 应用程序中的 WKWebView 而不是 macOS 应用程序 区别在于几乎只是实现了 UIViewCon
  • 无法在 Office 365 图形 API 的驱动器请求上同时使用顶部和跳过

    我们最近看到了我们认为在进行 drives 调用时使用 top 和skip 查询参数的功能变化 一个调用示例是 https graph microsoft com v1 0 sites siteid drives top 1 skip 2
  • PHP 以奇怪的波特率进行串行

    我正在尝试使用 PHP 将文本发送到 LED 标志 以便我可以向其发送支持票号 标志本身就是一件作品 它来自 eBay 制作很差 几乎没有文档 经过一段时间的摆弄后 我能够弄清楚它期望的东西发送给它的方式 并且波特率为 28800 我已经知
  • 使用 PHP gd 库提高图像质量

    不知道在哪里 但我发现了一个图像托管网站 它允许您以大格式上传图像或锐化图像 我个人不记得或不知道 GD 库有任何锐化图像的功能 这可能只是质量提升的不同词 如果有人知道锐化图像的功能 请告诉我 因为我个人在 Image Magic 和 或
  • 如何在 Javascript 中获取当前日期/时间而不使用系统时间?

    new Date 获取当前系统时间 这意味着 如果当前系统时间错误 在我的例子中 客户端计算机是Windows系统 其时间设置为当前时间的 4小时 new Date 将提供错误的值 我需要一种方法来获取客户端的当前日期 时间 而不使用他的机
  • Google Play 服务 LocationServices.API - 新选项“从不”

    已解决 答案在最后 我正在使用新方法从 Google Play Services 7 0 检索位置 http android developers blogspot com 2015 03 google play services 70 p
  • HTTP“Host”标头参数中是否需要端口号?

    假设我向以下地址发出 HTTP 请求 foosite com但我实际发送请求的端口是 6103 我不将该端口放在Host标题例如 GET barpage HTTP 1 1 Host foosite com Method GET http 服
  • Typescript 导出推断类型而不是显式类型

    我的上下文在vue router 尽管这可能并不重要 我想这样定义我的路线 import RouteLocationRaw from vue router type RouteNames dashboard flowRun type Rou
  • Expression.DebugInfo 如何标记表达式?

    所以我知道 Expression DebugInfo 的用途 并且创建了一个调试表达式 但如何使用此调试信息标记其他表达式 这是我正在尝试的一个非常基本的测试 using System using System Collections Ge
  • Python time.sleep() 与 event.wait()

    我想在我的多线程 Python 应用程序中定期执行一个操作 我见过两种不同的做法 exit False def thread func while not exit action time sleep DELAY or exit flag
  • ggplot 将标题的一部分斜体化并将文本分为两行

    我喜欢将以下标题添加到我的图表中 注 美国市场集中度平均值 王国和荷兰分别是1920年 1388年和1244年 其中 注 需要斜体 荷兰分别是1920年 1388年和1244年 应另起一行 使用paste函数 我无法将一部分斜体化 但使用
  • Eclipse 调试器不会在条件断点处停止

    我在 Eclipse 中有这段 Java 代码 我想对其进行调试 这是代码 public Double repulsion Node n1 Node n2 Double rep 0 0 rep Math pow K 2 distEuc n1
  • 使用 WinAPI 挂钩对程序进行沙箱处理

    我想对本机代码进行沙箱处理 并使用 WinAPI 和系统函数的挂钩来阻止或允许该程序执行某些操作 例如读 写文件 修改 Windows 注册表 使用 Internet 连接 这是一种良好且安全的方法吗 该程序绕过这样的安全层有多困难 我已经
  • StringReplace 的二进制版本

    我正在尝试在保存大量数据的 RawByteString 上运行 AnsiStrings StringReplace 其中一些数据需要替换 它会起作用 除了在 StringReplace 内部它将我的字符串转换为 PAnsiChar 因此搜索