在循环 TStringList 项时是否有避免越界索引错误的良好实践?

2023-12-09

:)

首先,我的代码

procedure TForm1.Button3Click(Sender: TObject);
var tempId,i:integer;
begin
tempId:=strtoint(edit5.Text);
plik:=TStringList.Create;
plik.LoadFromFile('.\klienci\'+linia_klient[id+1]+'.txt');
if (plik.Count=1) then
  begin
  label6.Caption:='then';
    if (tempId=StrToInt(plik[0])) then
      begin
      Label6.Caption:='Zwrócono';
      plik.Delete(0);
    end
  end
else
for i:=0 to plik.Count-2 do
  begin
    if (tempId=StrToInt(plik[i])) then
    begin
      Label6.Caption:='Zwrócono';
      plik.Delete(i);
    end;
  end;
plik.SaveToFile('.\klienci\'+linia_klient[id+1]+'.txt');
plik.Free;
end;
  • When for i:=0 to plik.Count-2 do我可以删除任何元素,但不能 最后的。
  • When for i:=0 to plik.Count-1 do我可以删除任何元素而无需 但从头到尾。因为否则列表索引越界.

发生什么事了?如何安全搜索并从 TStringList 中删除元素?


从列表中删除您想要使用的项目时downto循环,即

for i := plik.Count-1 downto 0 do
  begin
    if (tempId=StrToInt(plik[i])) then
    begin
      Label6.Caption:='Zwrócono';
      plik.Delete(i);
    end;
  end;

这确保了如果您删除项目,当您从列表末尾向下移动到列表开头时,循环索引保持有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在循环 TStringList 项时是否有避免越界索引错误的良好实践? 的相关文章

  • 从命令行增加 Delphi XE 项目版本号

    我有一个 Delphi XE 项目 我试图在使用 MSBuild 构建它之前更改程序的版本号 版本号信息位于 DPROJ 文件中 但如果我更改这些值 版本号不会更改 我认为原因是当您在 IDE 中更改版本号时 Delphi 会将更改保存到
  • Delphi 2010 控制闪烁

    我一直在从 XP 操作系统升级或迁移我们的软件 以便能够在 Windows 7 下编译和运行 我们的软件开始出现我们在 Windows XP 下没有注意到的问题 目前 我正在处理 TForm 上闪烁的用户定义控件 它似乎时不时地闪烁 但并非
  • 以高效的方式将字符串转换为十六进制

    我开发了以下函数将字符串转换为十六进制值 function StrToHex const S String String const HexDigits array 0 15 of Char 0123456789ABCDEF var I I
  • Delphi - 如何将通用参数传递给接受 const 参数数组的函数

    我有一个 基类 其中包含一个 函数 该函数接受 const 数组 类型的参数 如下所示 type TBaseClass class TObject public procedure NotifyAll const AParams array
  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • 是否有适用于 >= Delphi 2007 的 Delphi 混淆器

    我曾经使用 Pythia 来混淆我的 D6 程序 但 Pythia 似乎不再适用于我的 D2007 这是 Pythia 的链接 自 2007 年初以来没有更新 http www the interweb com serendipity in
  • 有什么办法可以将2个数组添加到一个数组中吗?

    有没有一种简单通用的方法可以将两个数组添加到一个数组中 在下面的情况下 不可能简单地使用C A B陈述 我想避免每次都为它制定算法 TPerson record Birthday Tdate Name Surname string end
  • 如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小?

    有谁知道如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小 我的 1080p 22 显示器的字体太小 无法阅读 而且会导致眼睛疼痛 一些笔记 它不尊重系统的 DPI 设置 因此更改系统设置没有帮助 而且 我现在已经使用 14
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 如何确保 FormClose 程序运行,无论程序如何退出?

    在 Delphi 7 中 我有一个 TMainForm FormClose 过程 旨在在程序退出时写出一些状态 这在手动关闭程序时效果很好 但是 我发现如果程序被 Windows 强制 退出 例如在 Windows 更新后需要重新启动 则不
  • Delphi线程死锁

    我有时会在销毁某些线程时遇到死锁问题 我尝试过调试该问题 但在 IDE 中调试时似乎从未存在死锁 可能是因为 IDE 中的事件速度较低 问题 当应用程序启动时 主线程会创建多个线程 线程始终处于活动状态并与主线程同步 完全没有问题 当应用程
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • Indy 的 TIdHTTPProxyServer:如何过滤请求?

    我正在使用 TIdHTTPProxyServer 来实现一个简单的 HTTP 代理 但我现在想阻止一些与某些 URL 匹配的连接 哪个事件和 或组件最适合实现这一目标 Indy 文档并没有太多解释 Thanks 作为基本过滤器 您可以使用
  • 如何在 Delphi REST 中发布内容类型为“multipart/form-data”的数据?

    我正在尝试使用 REST API 发送请求multipart form data作为内容类型 我总是收到 HTTP 1 1 500 Internal Error 作为响应 我尝试向需要的方法发送请求application x www for
  • Delphi - 自XE8以来如何正确注册图形类?

    我正在编写一个 Delphi 包 它提供了一个新的自定义 TGraphic 对象 允许读取 VCL 组件 如 TImage 中的新图像格式 我最初使用 RAD Studio XE7 开发了这个包 并且运行良好 然而 我最近迁移到了较新的 R
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下
  • TDictionary 上的 GetItem 由链接器消除

    我正在使用一个TDictionary of
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以

随机推荐

  • java和python之间传递数据

    如果我的问题很菜鸟 我很抱歉 我正在运行 Django 1 2 和 pgsql 8 4 我需要在获取用户的输入后运行 Java 程序 进行一些计算并将结果返回给用户 我可以知道在 Java 和 Python Django 之间传递数据的最佳
  • 如何通过 ingress 将服务暴露给外部 Kubernetes 集群?

    我正在努力将 AWS 集群中的服务公开给外部并通过浏览器访问它 自从我的上一个问题还没有得出任何答案 我决定从几个方面简化问题 首先 我创建了一个无需任何配置即可运行的部署 基于本文 I did kubectl create namespa
  • 将字符串值聚合到列表中

    我正在尝试使用一些非常简单的逻辑将未旋转的列转换为本质上相当于分组列表的内容 然而 在有效地做到这一点上遇到了困难 本质上 我有一个数据集 如下所示 CUST ID ORDER 1 Cake 1 Bread 2 Cake 3 Cake 3
  • 使用自动实现的属性或自己实现该属性

    在 C 中 我们可以创建一个自动实现的属性 如下所示 public string MyValue get set 然而 我们也可以像这样自己创建一个属性 private string myValue public string MyValu
  • 颜色条不适用 vmin 和 vmax

    我有以下奇怪的行为 当我限制图形的范围时 颜色图仍然显示它 import matplotlib pyplot as plt import numpy as np fig ax plt subplots x np linspace 0 1 1
  • 复选框标签的 jQuery 选择器

  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • ARM:为什么立即数只有 12 位?

    这是什么意思 我只有 12 位用于立即常量 所以我只能表示从 0 到 2 12 4096 的立即常量吗 操作数 2 如果是寄存器 可以有 32 位 但为什么立即数只有 12 位 这个数字从哪里来 它由指令集定义 例如 这MOV指令编码为 3
  • 如何使用 dask/dask-cudf 将单个大型镶木地板文件读取到多个分区?

    我正在尝试阅读一个大的parquet文件 大小 gt gpu size 使用dask cudf dask但它目前正在将其读入单个分区 我猜测这是从文档字符串推断出的预期行为 dask dataframe read parquet path
  • java中骑行和使用equals方法遇到的问题

    我在尝试弄清楚如何比较 AM FM 和 XM 之间的 selectedRadio 时遇到问题 以便我可以确定它当前所在的位置 然后返回特定收音机的电台 我知道我需要 equals 方法 我只是不确定使用它来获得我正在寻找的结果的正确方法 p
  • 使用 Rails 2.3.18 在 [] (Gem::LoadError) 中找不到捆绑器 (>= 0)

    我有红宝石版本ruby 1 9 3 p547 x86 64 我正在用它导轨3 0 现在我有一个 Rails 版本的项目 2 3 18 当我通过命令提示符进入项目时 它要求安装rvm使用ree 1 8 7 2012 02 x86 64 当我运
  • VS2015没有TypeScript模板,不支持TypeScript

    我正在研究 Visual Studio 2015 专业版 我已经使用 npm 安装了 TypeScript 安装了 TypeScript 2 0 3 然后我尝试使用右键单击项目的 tsScript 文件夹添加 TypeScript 文件 g
  • MPI 创建的进程的共享内存访问控制机制

    我有一个由多个进程使用的共享内存 这些进程是使用创建的MPI 现在我需要一种机制来控制这个共享内存的访问 我知道named semaphore and flock可以使用机制来做到这一点 但只是想知道 MPI 是否为共享内存使用提供任何特殊
  • 如何在 TypeScript 中实现 pluck 函数?

    我经常需要从对象中提取属性 const obj a 1 b 2 c 3 const plucked pluck obj a b a 1 b 2 然而 如果你想要类型安全 这在 TypeScript 中并不容易做到 因为我无法在 TypeSc
  • 如何在 jQuery 的 `val` 中访问元素本身?

    我的代码如下 const pagedata name Value for name email Value for email fillvalfromvar val pagedata this attr id 我需要填充所有具有以下元素的元
  • SQL 运算符与“">=”和“<=”运算符之间的差异

    我们使用 SQL 查询根据 dateFrom 和 dateTo 字段进行搜索 为此我正在使用 大于等于 gt and 小于等于 用于搜索日期字段的运算符 我还发现我们还可以使用 SQL Between 操作员做同样的事情 只是想确认一下我们
  • py.test 未启动(EBUSY:[资源设备])

    刚刚安装了 py testpip install U pytest没有错误 但是我们正在尝试启动py test我收到错误 EBUSY Resource device listdir C Users Administrator AppData
  • 简单的 html dom - 类名中的空格

    我正在使用 PHP Simple HTML DOM 从网站 不是我的 的源代码中获取元素 当我找到一个名为 board List 的 ul 类时 没有找到它 我认为这可能是一个问题空间大 但不知道怎么解决 这是一段php代码 html st
  • oracle查询中1000000转1M和1000转1K

    我想通过使用 oracle 查询显示如下给出的数字 1000000 1M 22000 22k 请问有什么方法可以在oracle查询中做到这一点吗 我认为没有标准函数 科学计数法除外 但您可以自己定义这样的函数 SQL gt WITH DAT
  • 在循环 TStringList 项时是否有避免越界索引错误的良好实践?

    首先 我的代码 procedure TForm1 Button3Click Sender TObject var tempId i integer begin tempId strtoint edit5 Text plik TStringL