问题标签 [tstringlist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphi - 将文件读取到字符串列表,然后删除并写回文件
我目前正在开发一个在 Delphi 2010 中生成文件哈希的程序。作为其中的一部分,我可以选择创建用户预设,例如用户可以创建/保存/删除的哈希算法的预定义选择。我的创建和加载代码工作正常。它使用 ComboBox 并从文件“fhpre.ini”加载,在此文件内是以以下格式存储的用户预设:-
PresetName
PresetCode(一个 12 位字符串,使用 0 表示不散列,1 表示做)
在应用程序加载时,它会将此文件中的数据加载到 ComboBox 和一个数组中,其中 ComboBox 的 ItemIndex 与数组中对应的正确字符串 0 和 1 匹配。
现在我需要实现一个功能,让用户从列表中删除一个预设。到目前为止,我的代码如下,
但是,如果运行它,当它到达 WriteLn 部分时,我会收到 105 错误。我知道代码不是很好,例如没有检查具有相同名称的预设,但这会发生,我想先让基本代码工作,然后可以调整并添加额外的检查等。
任何帮助,将不胜感激。
delphi - 排序的 TStringList,排序是如何工作的?
我只是好奇,因为最近我看到了 Java 中 Hashmaps 的使用,并且想知道 Delphi 的 Sorted String 列表是否完全相似。
TStringList 对象是否生成一个 Hash 以用作每个项目的索引?以及如何通过 Find 函数对照字符串列表检查搜索字符串?
我经常使用 Sorted TStringLists,我只是想进一步了解发生了什么。
请假设我不知道哈希映射是如何工作的,因为我不知道:)
谢谢
delphi - 记录中的 Delphi 字符串列表
记录中是否可以有一个字符串列表?例如
如果我认为我需要在使用记录之前创建它?
arrays - 字符串stringlist转换的delphi数组
delphi 中是否有一种简单的方法可以将字符串数组转换为 tstringlist?
delphi - 如果列表已排序,为什么 Delphi 的 TStringList.InsertObject() 方法会抛出异常?
在 Delphi 6 中,如果您尝试将对象插入已排序的 TStringList (Sorted = true),则会引发异常,警告您在已排序的列表中不允许 InsertObject()。如果调用 InsertObject() 必然意味着破坏列表的排序顺序,我可以理解这一点。但鉴于 TStringList.Find() 方法:
返回一个索引,告诉您如果将给定字符串添加到列表中,插入索引应该是什么,使用该索引调用 InsertObject() 应该在操作后使排序列表保持排序顺序。我已经检查了 TStringList 的 Delphi 源代码,它似乎证实了我的断言。
现在我只是为 TStringList 创建一个新的子类,它覆盖 InsertObject() 并且如果在排序列表上调用 InsertObject() 则不会抛出异常,但我想确保不存在一些隐患我只是没有看到。
——罗施勒
delphi - 索引处的值的 TStringList 问题
因此,我有几个要读取并从中获取值的摘要文件。
我正在执行以下操作:
初始化我正在使用的值
然后,我有一个循环:
第一个 0 到 5 循环跳过我不想阅读的行,而 0 到 82 读取的行看起来像
所以我正在调试程序,看看它是如何与 2 个 SummaryFiles 一起工作的。
第一次通过,它完美地工作。该行被正确读取,我得到了值,当我插入 valuestring 时,它看起来像“,1770”(例如),我还可以在插入命令之后突出显示 OutputSummary[ndx] 并查看该值是否正确插入。
然后我打开第二个文件,它也可以正常工作,直到该行
第一次,OutputSummary[0] 是正确的并添加了正确的行。
但是,OutputSummary[1] 到 OutputSummary[82] 与 OutputSummary[0] 相同!这是没有意义的,因为当我第一次添加这些值时,我可以看到 OutputSummary[1] 到 82 是唯一且正确的。
任何人都可以看到问题吗?是调试器错误吗?我只是错过了一些我看不到的明显东西吗?
谢谢
delphi - TStringList 拆分错误
最近,我收到了一位知名 SO 用户的通知,该用户TStringList
存在拆分错误,这将导致它无法解析 CSV 数据。我没有被告知这些错误的性质,包括Quality Central在内的互联网搜索没有产生任何结果,所以我在问。什么是TStringList 拆分错误?
请注意,我对基于毫无根据的意见的答案不感兴趣。
我知道的:
不多......一个是,这些错误很少出现在测试数据中,但在现实世界中并不罕见。
另一个是,如前所述,它们阻止正确解析 CSV。考虑到很难用测试数据重现错误,我(可能)正在向那些尝试在生产代码中使用字符串列表作为 CSV 解析器的人寻求帮助。
无关问题:
我获得了有关“Delphi-XE”标记问题的信息,因此由于“空格字符被视为分隔符” 功能而导致解析失败不适用。因为 Delphi 2006 引入的StrictDelimiter
属性解决了这个问题。我自己正在使用 Delphi 2007。
另外由于字符串列表只能保存字符串,所以它只负责拆分字段。任何涉及由区域设置差异等引起的字段值(fi 日期,浮点数......)的转换困难都不在范围内。
基本规则:
CSV 没有标准规范。但是从各种规范中可以推断出一些基本的规律。
下面是 TStringList 如何处理这些的演示。规则和示例字符串来自Wikipedia。括号 ( [
]
) 叠加在字符串周围,以便能够通过测试代码查看前导或尾随空格(如果相关)。
空格被认为是字段的一部分,不应被忽略。
带有嵌入逗号的字段必须用双引号括起来。
嵌入双引号字符的字段必须包含在双引号字符内,并且每个嵌入的双引号字符必须由一对双引号字符表示。
带有嵌入换行符的字段必须用双引号括起来。
在修剪前导或尾随空格的 CSV 实现中,具有此类空格的字段必须用双引号字符括起来。
字段可能总是包含在双引号字符中,无论是否必要。
测试代码:
如果您已经阅读了所有内容,那么问题是:),什么是“TStringList 拆分错误”?
delphi - Delphi Tstringlist,写文件同步
我用 tstringlist 做了一个非常简单的日志。我将其写入文件:
某处存在错误,我的计算机已关闭。之后,我找不到我的日志文件。该文件可能以异步模式保存。有没有办法在执行之前等待写入?
谢谢,阿尔贝托
delphi - TStringList .add 从随机函数产生重复
遇到问题,我似乎无法解决问题。我正在尝试从函数调用中收集字符串(带有字母和数字的随机代码)并放入我的 TStringList 变量中。相关代码如下。
如果我运行测试,字符串会重复给定的时间,然后生成一个新的。如果我在每次生成代码后引入 sleep(xx) 或 showmessage 命令(请参阅下面的“编辑”),它会很好地复制/返回到备忘录,一切看起来都很好。如果我删除“延迟”,我会再次从功能中重复。
添加到 TStringList 的函数部分:
..
编辑:正如我在下面提到的,如果我留下 ShowMessage 或 Sleep(xx) 调用以在 .add 之间暂停,它工作正常。如果我删除它,我会在最终的 tmemo 中得到一堆重复的条目。 编辑: MakeCode 是一个返回单个随机字符+数字字符串的函数(A..Z a..z 0..9)。它自己工作得很好。
(编辑答案2)
没有出现异常。
因此,如果我不包括 sleep() 它可能会生成 500 个字符串,但它们都是重复的;在给定的时间后,它确实发生了变化。随着我增加睡眠命令,函数调用的重复次数会减少。在睡眠(40)左右;它从功能中正确显示。但当然,这是耗时且不可接受的。
MakeCode() 的“胆量”