問題タブ [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:TStringListアイテムのインデックスを作成するための整数以外のタイプ

Arraysユーザー定義の列挙型を使用してインデックスを作成できます。例えば:

この配列の要素は、TIndexValue値をインデックスとして使用して参照できます。

これと同じ一般的な機能を。で取得しようとしていTStringListます。

Integer簡単な解決策の1つは、参照時にすべてのインデックス値を型にキャストすることです。

別の解決策(すべてのキャストを非表示にする)は、のサブクラスを作成し、継承されたプロパティTStringListにアクセスするこのサブクラスのサブルーチンへのすべてのキャストを延期することです。Strings

これは、列挙型を使用する単一の実装で正常に機能しますTIndexValue

ただし、可能な列挙型ごとにサブクラスTStringListを定義することなく、この同じロジックまたはサブクラスを、異なる列挙型によってインデックス付けされたいくつかの異なるオブジェクトに再利用したいと思います。TStringList

このようなことは可能ですか?Delphiのジェネリックに依存する必要があるのではないかと思いますが、これを実現するためのより簡単な方法があることを知りたいと思います。

0 投票する
4 に答える
23018 参照

delphi - 変数がTStringとして宣言され、TStringListとして作成されるのはなぜですか?

変数がとして宣言されTStrings、作成されるのはなぜTStringListですか?

例:varslはとして宣言されていますTStringsが、として作成されていますTStringList

0 投票する
4 に答える
3209 参照

delphi - TStringList に複数の区切り文字を追加する

これは私の区切られたテキストです: $HEHDT,10.17,T*28$HEHDT,10.18,T*2A など...

コンマは私の文の区切り記号です。ただし、区切り文字としてアスタリスクも使用したいと思います。

私が達成したい出力は次のとおりです。

$HEHDT 10.17 T 28 $HEHDT 10.18 T 2A

Delphiで複数の文区切り文字を指定するにはどうすればよいですか? これは私がこれまでに持っているコードです。

上記のコードでは、カンマのみを区切り文字として使用します。コンマとアスタリスクの両方の 2 つの区切り記号を含めるにはどうすればよいですか?

よろしくお願いします!=)

0 投票する
1 に答える
641 参照

delphi - VB6 と Delphi - TStringList は VB で無料です

私は次のような状況があります: オブジェクトは、Delphi で作成された OCX を使用して VB6 でインスタンス化されます。私がいつ

Count は TStringList OCX のすべての項目の値を正しく受け取りますが、すぐに TXT が空になる以下の行で、「x.item.cout」の値が失われます。Delphi でデバッグすると、実際には TStringList がメモリから解放されますが、これは何の意味もありません (Delphi と VB の間に利益相反があるようです)。こことGoogleで検索すると、TStringListではなくPCharを使用することについて多くのコメントが寄せられていることがわかりました。これはより適切な作業方法ですが、C#2005と同じOCXを使用するという疑問が残ります。問題は発生しません. (他の言語と同様に、これまでのところ VB 6 のみ)。

ええと、VB がオブジェクト (TStrinList) を強制終了するという証拠があります。VB にとって、そのオブジェクトはもはや必要ないからです。起こる奇妙なことの1つは、もし私が

必要なすべてのプロセスをエラーなしで実行できますが、最初のケースではエラーがまだ残っています。

誰かが同様の問題に遭遇しましたか?

みんなありがとう、私に手を貸してくれる人は誰でも...感謝します

0 投票する
2 に答える
1141 参照

delphi - Delphi IDE で文字列リストの範囲を監視/検査する方法は?

文字列リストの一部で何が起こっているかをデバッグしている状況に陥ることがよくあります。たとえば、データは StringList[StartOfBlock] から StringList[EndOfBlock] の範囲で操作されています。StringList[LineNum] のように、その範囲内の 1 つ以上の変数インデックスを使用して、すぐに検査または監視できる可能性がありますが、範囲 StartBlock/Endblock 内の隣接する文字列を検査するのは面倒です。StringList[LineNum+1] に別のウォッチを追加したり、Ctrl-F7 インスペクターで式を変更したりできますが、それは大変な作業です ;-(

IDE で StringList[StartOfBlock] から StringList[EndOfBlock] を永続的に表示したいと考えています。(そして、StartOfBlock/EndOfBlock が変更されたときにそのビューが変更される場合、またはそのビューを更新できる場合は、非常に便利です。)

それを達成するために何かを「IDEに」組み込むにはどうすればよいですか?

0 投票する
1 に答える
12516 参照

delphi - memo.Lines が TStringList ではなく TStrings を使用するのはなぜですか?

なぜMemo.Lines抽象クラスを使用するのTStringsですか? TStringList代わりに使用しないのはなぜですか?

そして、それを操作する前に変換する必要がTStringListありますか?

0 投票する
2 に答える
2541 参照

delphi - すべてのメモリを解放しない TStringList および TThread

使用したバージョン: Delphi 7。

仮想 ListView で単純なforループを実行するプログラムに取り組んでいます。データは次のレコードに保存されます。

項目は索引です。SubItem1操作のステータス (成功または失敗)。SubItem2ファイルへのパス。forループは各ファイルをロードし、いくつかの操作を行ってから保存します。操作は TStringList で行われます。ファイルはそれぞれ約2MBです。

ここで、メイン フォームで操作を行うと、完全に機能します。

マルチスレッド、巨大なメモリの問題があります。どういうわけか、TStringList は完全に解放されていないようです。3 ~ 4k ファイルの後、EOutofMemory 例外が発生します。ソフトウェアが 500 ~ 600 MB に固執する場合もあれば、そうでない場合もあります。いずれにせよ、TStringList は常に EOutofMemory 例外を返し、ファイルをロードできなくなります。より多くのメモリを搭載したコンピューターでは、例外を取得するのに時間がかかります。

他のコンポーネントでも同じことが起こります。たとえば、 Synapse からTHTTPSendを使用すると、しばらくすると、メモリ消費量が多すぎるため、ソフトウェアは新しいスレッドを作成できなくなります。最大100MBである必要がありますが、約500〜600MBです。メイン フォームでは、すべて正常に動作します。

間違いは私の側にあると思います。多分私はスレッドを十分に理解していません。Destroyイベントですべてを解放しようとしました。FreeAndNil手順を試しました。一度に 1 つのスレッドだけで試しました。スレッドを手動で解放しようとしました(FreeOnTerminateはありません...)

運がない。

これがスレッドコードです。これはあくまでも基本的な考え方です。すべての操作を含む完全なコードではありません。LoadFile プロシージャを削除すると、すべて正常に動作します。スレッドプールに従って、ファイルごとにスレッドが作成されます。

何が問題なのですか?

ある時点で、作成されるスレッドが多すぎるのではないかと考えました。ユーザーが 100 万個のファイルをロードすると、最終的には 100 万個のスレッドが作成されますが、同時に作成されて実行されるスレッドは50 個だけです。

ご意見ありがとうございます。

0 投票する
2 に答える
1638 参照

delphi - TStringList の名前と値のペアに対する特殊文字の制限は?

数千の名前と値のペアが読み込まれた TStringList があります。それらの1つは 004001000002000=Timbre2 Volume 0~127 4995

文字列「004001000002000」で IndexOfName を呼び出して、特定のインデックスを見つけます。ValueFromIndex が文字列 'Timbre2 Volume 0~127 4995' を返すことを期待しています

代わりに、ValueFromIndex を使用してこの値にアクセスすると、次の文字列が返されます。

これは何が原因ですか?チルダは、文字列が切り捨てられる特殊文字ですか? 他のものに設定できますか?

0 投票する
3 に答える
1047 参照

delphi - Delphi - 指定されたデータから行インデックスとデータ インデックスを取得する

したがって、さまざまなチャーターを含む可能性のあるデータのリストがあります。

最初の行のデータには、、、、、が1d含まれAAます。必要なのは、指定されたインデックスのデータを提供する関数だけです。例: インデックス 6 のデータは(行 - 2、行内のインデックスは 2) です。すべての行の長さは 8 で、データの長さは 2 です。bt54Fl

Delphiでそのような関数を作成するにはどうすればよいですか?

結果関数は次のようになります。

私の悪い英語で申し訳ありません...

0 投票する
1 に答える
781 参照

multithreading - 下がらない仮想リストビュー、スレッド、メモリ消費量

*更新: 2 人の人が、実際の/完全なコードがなければ、私を助けるのは難しいと言いました. ほとんどは下にありますが、何か忘れた場合はここにあります。Laserrental.ca/MemoryProblem.zip


使用されている Delphi のバージョン: 2007

こんにちは、

私はスレッドと仮想リストビューが初めてなので、問題は簡単に解決できるかもしれません。しかし、私は数日間立ち往生しています。基本的に、ここに私が持っているものがあります:

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

ユーザーが [ URL の読み込み]をクリックすると、URL が次のレコードに保存されます。

そして、レコードは仮想リストビューを埋めるために使用されます。OnData コードは次のとおりです。

ユーザーがGOをクリックすると、アプリはワーカー スレッドの作成を制御する 1 つのスレッドを起動します。各ワーカー スレッドは URL を受け取り、それをダウンロードして解析し、詳細情報を取得します。

さて、ここに私の問題があります。少なくともタスク マネージャーによると、メモリ消費量は常に増え続けています。アプリを最小化して再度開くと、メモリ消費量は通常に戻りますが、仮想メモリの消費量は非常に高いままです。多くの人が、タスク マネージャーは信頼できないと言っています。しかし、しばらくすると、メモリの消費量が非常に多くなり、URL をダウンロードできなくなります。EOutOfMemoryエラーが発生します。私のコンピューターは非常に遅くなります。

FastMM4 によると、メモリ リークはありません。

ここで面白いことに、TVirtualList レコードを消去すると、「通常」と仮想の両方のメモリ消費量が通常に戻ります。でも、それをしない限り、それは非常に高いままです。アプリで何千もの URL をダウンロードできるようにしたいので、明らかにこれは問題です。しかし、このバグでは、あまり遠くまで行くことはできません。

TVirtualList レコードをクリアするコード


だから私はアプリを本質的に取り除いた. 解析は行われず、ファイルをダウンロードする代わりに、アプリはクリティカル セクションを使用して単一のローカル HMTL ファイルを読み込みます。メモリ消費の問題はまだ残っています。


制御スレッド:

ワーカー スレッド: