問題タブ [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 投票する
1 に答える
262 参照

php - PHPスクリプトは「T_STRING」を出力します(それだけです)

ここでコードを使用しています-PHPプロジェクトで未使用の関数を見つけるにはどうすればよいですか(以下に再現)-パスを自分の場所に変更するだけで、次のように動作します:

使用されるコードは次のとおりです。

PHP のバージョンは次のとおりです。

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

delphi - Delphi-ファイルをStringListに読み取り、削除してファイルに書き戻します

私は現在、Delphi 2010で、ファイルのハッシュを生成するプログラムに取り組んでいます。この一環として、ユーザーが作成/保存/削除できるハッシュアルゴリズムの事前定義された選択など、ユーザープリセットを作成するオプションがあります。コードの作成と読み込みは正常に機能しています。これはComboBoxを使用し、ファイル「fhpre.ini」からロードします。このファイル内には、次の形式で保存されたユーザープリセットがあります。-

ResetNameプリセット
コード(ハッシュしない場合は0、ハッシュする場合は1を使用する12桁の文字列)

アプリケーションをロードすると、このファイルからComboBoxと、配列内の対応する正しい0と1の文字列に一致するComboBoxのItemIndexを持つ配列にデータがロードされます。

次に、ユーザーにリストからプリセットを削除させる機能を実装する必要があります。これまでのところ、私のコードは次のとおりです。

ただし、これを実行すると、WriteLnセクションに到達したときに105エラーが発生します。コードが優れていないことは承知しています。たとえば、同じ名前のプリセットのチェックがありませんが、それが実現するので、最初にベースコードを機能させてから、チェックを調整して追加することができます。

どんな助けでもいただければ幸いです。

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

delphi - レコード内の Delphi 文字列リスト

レコードに文字列リストを含めることは可能ですか? 例えば

レコードを使用する前に作成する必要があると思いますか?

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

arrays - 文字列 stringlist 変換の Delphi 配列

Delphi で文字列の配列を tstringlist に変換する簡単な方法はありますか?

0 投票する
5 に答える
1292 参照

delphi - リストがソートされている場合、Delphi の TStringList.InsertObject() メソッドが例外をスローするのはなぜですか?

Delphi 6 では、ソートされた (Sorted = true) TStringList にオブジェクトを挿入しようとすると、例外がスローされ、InsertObject() はソートされたリストでは許可されないという警告が表示されます。InsertObject() を呼び出すことが必然的にリストの並べ替え順序を破棄することを意味する場合、これを理解できました。しかし、TStringList.Find() メソッドを考えると:

リストに追加された場合、指定された文字列の挿入インデックスがどうあるべきかを正確に示すインデックスを返します。そのインデックスで InsertObject() を呼び出すと、操作後もソートされたリストがソートされたままになります。TStringList の Delphi ソースを調べたところ、私の主張が裏付けられたようです。

今のところ、InsertObject() をオーバーライドし、並べ替えられたリストで InsertObject() が呼び出された場合に例外をスローしない TStringList の新しいサブクラスを作成していますが、隠れた危険がないことを確認したいと考えています。見てないだけ。

-- ロシュラー

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

delphi - インデックスの値に関する TStringList の問題

そのため、値を読み取って取得したい要約ファイルがいくつかあります。

私は次のことをしています:

使用している値を初期化する

次に、ループがあります:

最初の 0 から 5 のループは読みたくない行をスキップし、0 から 82 は次のような行を読み取ります。

そこで、プログラムをデバッグして、2 つの SummaryFiles だけでどのように動作するかを確認しました。

初めて、それは完全に機能します。行が正しく読み取られ、値が取得され、値文字列を挿入すると、",1770" のように表示されます (たとえば)。また、挿入コマンドの後に OutputSummary[ndx] を強調表示して、値が正しく挿入されたことを確認することもできます。

次に、2 番目のファイルを開きます。これも次の行まで正常に動作します。

初めて、OutputSummary[0] は正しく、正しい行が追加されます。

ただし、OutputSummary[1] ~ OutputSummary[82] は OutputSummary[0] と同じです。これらの値を最初に追加したときに、OutputSummary[1] から 82 までが一意で正しいことがわかったので、これは意味がありません。

誰でも問題を確認できますか? デバッガのエラーですか?見えない明らかなものが欠けているだけですか?

ありがとう

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

delphi - TStringList 分割のバグ

最近、評判の良い SO ユーザーから、TStringListCSV データの解析に失敗する分割バグがあるとの連絡を受けました。これらのバグの性質について知らされておらず、Quality Centralを含むインターネットで検索しても結果が得られなかったので、お尋ねします。TStringList 分割バグとは何ですか?

根拠のない意見に基づく回答には興味がないことに注意してください。


私が知っていること:

それほど多くはありません... 1つは、これらのバグがテストデータで表示されることはめったにありませんが、実際にはめったに表示されないということです。

もう 1 つは、前述のように、CSV の適切な解析を妨げることです。テスト データでバグを再現するのは難しいと考えて、(おそらく) 製品コードで文字列リストを CSV パーサーとして使用しようとした人に助けを求めています。

無関係の問題:

「Delphi-XE」タグ付きの質問の情報を入手したので、「スペース文字を区切り文字と見なす」 機能による解析の失敗は当てはまりません。StrictDelimiterDelphi 2006 でのプロパティの導入により、それが解決されたためです。私自身、Delphi 2007 を使用しています。

また、文字列リストは文字列しか保持できないため、フィールドの分割のみを担当します。ロケールの違いなどに起因するフィールド値 (fi 日付、浮動小数点数など) に関連する変換の問題は対象外です。

基本的なルール:

CSV の標準仕様はありません。しかし、さまざまな仕様から推測される基本的なルールがあります。

以下は、TStringList がこれらを処理する方法のデモです。ルールと文字列の例はWikipediaからのものです。角かっこ ( [ ]) は、テスト コードによって先頭または末尾のスペース (該当する場合) を確認できるように、文字列の周りに重ねられます。


スペースはフィールドの一部と見なされるため、無視しないでください。


コンマが埋め込まれたフィールドは、二重引用符で囲む必要があります。


二重引用符文字が埋め込まれたフィールドは二重引用符文字で囲む必要があり、埋め込まれた二重引用符文字はそれぞれ二重引用符文字のペアで表す必要があります。


改行が埋め込まれたフィールドは、二重引用符で囲む必要があります。


先頭または末尾のスペースを削除する CSV 実装では、そのようなスペースを含むフィールドを二重引用符で囲む必要があります。


フィールドは、必要かどうかに関係なく、常に二重引用符で囲むことができます。



テスト コード:



すべて読んだ場合、質問は :)、「TStringList 分割バグ」とは何ですか?

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

delphi - Delphi Tstringlist、書き込みファイル同期

tstringlist を使用して非常に単純なログを作成します。私はそれをファイルに書きます:

どこかにバグがあり、コンピューターがシャットダウンしています。その後、ログ ファイルが見つかりません。おそらく、ファイルは非同期モードで保存されます。実行を続行する前に書き込みを待つ方法はありますか?

ありがとう、アルベルト

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

delphi - TStringList .addは、ランダム関数から重複を生成します

問題があるので、指を置くことができないようです。関数呼び出しから文字列(文字と数字を含むランダムコード)を収集し、TStringList変数に配置しようとしています。関連するコードは以下のとおりです。

テストを実行すると、文字列が一定時間繰り返され、新しい文字列が生成されます。コードが生成されるたびにsleep(xx)またはshowmessageコマンドを導入すると(以下の「編集」を参照)、メモにコピー/戻り、すべてが正常に見えます。'delay'を削除すると、関数から繰り返しが返されます。

TStringListに追加する関数の部分:

..

編集:以下で説明するように、ShowMessageまたはSleep(xx)呼び出しを残して、.addの間に一時停止すると、正常に機能します。それを削除すると、最終的なtmemoに多数の重複エントリが表示されます。 編集: MakeCodeは、chars + numbers(A..Z a..z 0..9)の単一のランダムな文字列を返す関数です。それ自体で正常に動作します。

(回答2のために編集)

例外は現れませんでした。

したがって、sleep()を含めないと、500個の文字列が生成される可能性がありますが、それらはすべて繰り返しです。一定の時間が経過すると、変化します。スリープコマンドを増やすと、関数呼び出しからの繰り返しの量が減少します。スリープ前後(40); 関数から正しく表示されます。しかしもちろん、これには時間がかかり、受け入れられません。

MakeCode()の「根性」