问题标签 [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.

0 投票
2 回答
1386 浏览

delphi - Delphi:除 Integer 以外的类型用于索引 TStringList 项

Arrays可以使用用户定义的枚举类型进行索引。例如:

然后可以使用TIndexValue值作为索引来引用此数组中的元素:

我正在尝试使用TStringList.

一个简单的解决方案是在引用时将每个索引值转换为一个Integer类型:

另一个解决方案(隐藏所有转换)是创建一个子类TStringList并将所有转换推迟到该子类的访问继承Strings属性的子例程:

这适用于使用枚举类型的单个实现TIndexValue

但是,我想TStringList为由不同枚举类型索引的几个不同对象重新使用相同的逻辑或子类,而不必TStringList为每个可能的枚举类型定义子类。

这样的事情可能吗?我怀疑我可能不得不依赖 Delphi 的泛型,但我很想知道有更简单的方法可以实现这一点。

0 投票
4 回答
23018 浏览

delphi - 为什么将变量声明为 TStrings 并创建为 TStringList?

为什么变量被声明为TStrings并创建为TStringList

例如:varsl被声明为TStrings但被创建为TStringList

0 投票
4 回答
3209 浏览

delphi - 在 TStringList 中添加超过 1 个分隔符

这是我的分隔文本:$HEHDT,10.17,T*28$HEHDT,10.18,T*2A 等等...

逗号是我的句子分隔符。但是,我也想使用星号作为分隔符。

我想要实现的输出是:

$HEHDT 10.17 T 28 $HEHDT 10.18 T 2A

如何在delphi中指定超过1个句子分隔符?这是我到目前为止的代码。

对于上面的代码,它只使用逗号作为分隔符。如何包含 2 个分隔符,逗号和星号?

提前谢谢了!=)

0 投票
1 回答
641 浏览

delphi - VB6 和 Delphi - TStringList 由 VB 免费提供

我有以下情况:在VB6中使用Delphi制作的OCX实例化一个对象。当我

Count 正确接收 TStringList OCX 的所有项目的值,但很快下面的行,TXT 为空,'x.item.cout' 的值丢失。当我在Delphi中调试时,实际上发生的是从内存中释放一个TStringList,但这毫无意义(似乎Delphi和VB之间存在利益冲突)。在这里和google上搜索,我看到很多人评论说不使用TStringList而是使用PChar,这将是一种更合适的工作方式,但问题仍然是使用C#2005和相同的OCX,问题没有发生. (与其他语言一样,目前仅在 VB 6 中)。

好吧,我有证据表明 VB 杀死了对象 (TStrinList),因为对他来说,该对象不再是必需的,但它确实如此。发生的一件奇怪的事情是,如果我

它的工作,做所有必要的过程没有任何错误,但第一种情况,错误仍然存​​在。

有没有人遇到过类似的问题?

谢谢大家,任何可以帮我的人......将不胜感激

0 投票
2 回答
1141 浏览

delphi - 如何在 Delphi IDE 中观察/检查字符串列表范围?

我经常发现自己在调试字符串列表的一部分中发生的事情,例如数据在 StringList[StartOfBlock] 到 StringList[EndOfBlock] 范围内被操作。该范围内的一个或多个变量索引可能可用,我可以快速检查或观察,例如 StringList[LineNum],但检查 StartBlock/Endblock 范围内的相邻字符串很麻烦。我可以在 StringList[LineNum+1] 上添加另一个手表,或者在 Ctrl-F7 检查器中修改表达式,但工作量很大;-(

我希望在 IDE 中永久显示 StringList[StartOfBlock] 到 StringList[EndOfBlock]。(如果该视图在 StartOfBlock/EndOfBlock 更改时发生更改,或者该视图可以刷新,那将是非常好的。)

我将如何在 IDE 中构建一些东西来实现这一点?

0 投票
1 回答
12516 浏览

delphi - 为什么 memo.Lines 使用 TStrings 而不是 TStringList?

为什么要Memo.Lines使用抽象类TStrings?为什么不使用它TStringList呢?

我应该TStringList在使用它之前将其转换为吗?

0 投票
2 回答
2541 浏览

delphi - 不会释放所有内存的 TStringList 和 TThread

使用的版本: Delphi 7。

我正在开发一个在 Virtual ListView 上执行简单for循环的程序。数据存储在以下记录中:

项目是索引。SubItem1操作的状态(成功与否)。SubItem2文件的路径。for循环加载每个文件,执行一些操作,然后保存它。操作发生在 TStringList 中。每个文件大约 2mb。

现在,如果我在主窗体上进行操作,它会完美运行。

多线程,存在巨大的内存问题。不知何故, TStringList 似乎没有被完全释放。在 3-4k 个文件之后,我得到一个 EOutofMemory 异常。有时,软件卡在 500-600mb,有时则没有。在任何情况下,TStringList 总是返回一个 EOutofMemory 异常并且不能再加载任何文件。在具有更多内存的计算机上,获取异常需要更长的时间。

其他组件也会发生同样的事情。例如,如果我使用Synapse 的THTTPSend ,那么一段时间后,软件无法创建任何新线程,因为内存消耗太高。它大约是 500-600mb,而最大应该是 100mb。在主窗体上,一切正常。

我想错误在我这边。也许我对线程的了解不够。我试图在Destroy事件中释放所有东西。我尝试了 FreeAndNil程序。我一次只尝试一个线程。我尝试手动释放线程(没有FreeOnTerminate ...)

没运气。

所以这里是线程代码。这只是基本的想法;不是所有操作的完整代码。如果我删除LoadFile prodecure,一切正常。根据线程池为每个文件创建一个线程。

可能是什么问题呢?

我一度认为,可能创建了太多线程。如果用户加载 100 万个文件,那么最终将创建 100 万个线程——尽管只有 50 个线程同时被创建和运行

感谢您的输入。

0 投票
2 回答
1638 浏览

delphi - TStringList 名称-值对的特殊字符限制?

我有一个加载了几千个名称-值对的 TStringList。其中之一是 004001000002000=Timbre2 Volume 0~127 4995

我通过使用字符串'004001000002000'调用IndexOfName来找到一个特定的索引。我希望 ValueFromIndex 返回字符串 'Timbre2 Volume 0~127 4995'

相反,当我使用 ValueFromIndex 访问该值时,它会返回字符串:

这是什么原因造成的?波浪号是导致字符串被截断的特殊字符吗?我可以将其设置为其他内容吗?

0 投票
3 回答
1047 浏览

delphi - Delphi - 从给定数据中获取行索引和数据索引

所以我有可能包含不同章程的数据列表:

第一行数据包含:1d, AA, bt, 54. 我所需要的只是给我给定索引数据的函数。示例:索引 6 的数据为Fl(Line - 2, Index in line is 2)。每行长度为8,数据长度为2;

如何在 Delphi 中实现这样的功能?

结果函数应该是这样的:

对不起,我的英语不好...

0 投票
1 回答
781 浏览

multithreading - 虚拟列表视图、线程和内存消耗不会下降

*更新:有两个人告诉我,如果没有真实/完整的代码,很难帮助我。你几乎在下面有它,但如果我忘记了什么,就在这里!Laserrental.ca/MemoryProblem.zip


使用的 Delphi 版本:2007

你好,

我是线程和虚拟列表视图的新手,所以我的问题可能很容易解决;但是,我已经被困了几天。基本上,这就是我所拥有的:

http://image.noelshack.com/fichiers/2012/32/1344440638-urlsloader.png

用户单击加载 URL,URL 存储在以下记录中:

并且该记录用于填充Virtual Listview。这是 OnData 代码:

当用户点击GO时,应用程序将启动一个线程来控制工作线程的创建。每个工作线程获取一个 URL,下载并解析它以获取更多信息。

现在,这是我的问题:内存消耗总是越来越高——至少,根据任务管理器的说法。如果我最小化应用程序并再次打开它,内存消耗会恢复正常......但虚拟内存消耗仍然非常高。现在,我知道很多人说任务管理器不可靠。然而,一段时间后,内存消耗变得如此之高,以至于无法再下载 URL。我收到EOutOfMemory错误。我的电脑变得超级慢。

根据 FastMM4,没有内存泄漏。

有趣的是:如果我清除 TVirtualList 记录,内存消耗——“正常”和虚拟的——都会恢复正常。但除非我这样做,否则它会保持在超高水平。显然,这是一个问题,因为我希望应用程序能够下载成千上万个 URL;但是有了这个错误,我不能走得太远。

清除 TVirtualList 记录的代码


因此,我将应用程序精简到了最基本的部分。没有解析,应用程序使用临界区加载单个本地 HMTL 文件,而不是下载文件。内存消耗问题仍然存在。


控制线程:

工作线程: