問題タブ [powershell-7.0]

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 投票する
0 に答える
41 参照

string - 最新のPowershell 7.xで2文字をGB UTF8文字列に挿入する最速の方法

PowerShell 7.1 1 GB のテキスト UTF8 テキスト ファイルを 1 つの文字列に読み込んでいます。値が 127 より大きいすべての文字を検索し、その前に 2 文字をマーカーとして挿入する効率的な方法を探していました。たとえば、文字列には Unicode 10 進数の 12288 が全体に埋め込まれています。char コード 128 が必要です。次に、シーケンス内の文字数 (または 16 進数の方が良いと思われる場合は 16 進数) を保持する別の char が必要です。

FOR ループ ($i=0; $i -lt $text.length; $i++) を使用しようとした場合、[int]$text[$i] をチェックして、127 より大きい次の文字を見つけます。 $left+[char]128+$nonAsciirunlen+$right を使用してマーカーを挿入します

$text が [char]12288+' A '+[char]12288+[char]12288 の場合、128,1, 12288, 32, 65, 32, 128, 2, の [int] 値に変更されます。 12288、12288

問題は、一晩実行され、最初の約 350,000 しか処理されなかったことです。約10分で処理する必要がありますが、1時間でも構いません。

私の目標は、128 のマーカーとシーケンス長で char シーケンスをマークすることです。速度の問題は、文字列の左側、2 つのマーカー コード、そして文字列の右側を追加するたびにすべてが遅くなることです。文字列を連結するたびに PowerShell がメモリを解放していない可能性があると推測していますが、それは単なる推測です。メモリ使用量は見ていません。私は24GBのRAMを持っています。

-encoding UTF8 と Format-Hex を使用して文字列を 16 進数に変換しようとしましたが、10MB のセクションでも Format-Hex からメモリ配列例外が発生します。これはバイトレベルで機能していますが、同じ概念です。スキップする複数のバイトシーケンスの数は、実際の文字数をスキップするよりもサイズが大きくなります。

どんなアイデアでも大歓迎です。

これは、私が処理することができた中で最速です。これにより、別のアプリケーションが、マルチバイト文字でクラッシュすることなく、変更された UTF8 テキスト ファイルを処理できるようになります。