MSI Afterburnerログファイルの最後の行から特定の数字を正規表現で取得する必要があります

MSI Afterburnerログファイルの最後の行から特定の数字を正規表現で取得する必要があります

正規表現については何も知りませんが、次のように印刷されるログの最後の行から値を選択できるようにする必要があります。

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,405.000 

この場合、354.000 (100 から 9999 までの数字) の位置を取得する正規表現が必要です。

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,**354**.000             ,405.000 

また、このインスタンスで 405 がある場所を取得する正規表現は次のようになります。

80, 21-06-2017 20:42:27, 16.000              ,1392.000            ,4714.182            
80, 21-06-2017 20:42:28, 6.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:29, 7.000               ,860.500             ,810.000             
80, 21-06-2017 20:42:30, 7.000               ,354.000             ,**405**.000 

私は、CrystalControl2 というプログラムを使用して、コンピューターからの情報を外部 LCD 画面に表示しています。テキスト ファイルや HTML ページから情報を取得するためにプログラムに組み込まれているツールでは、フィルタリングされていないソース情報から結果を取得するために正規表現が必要です。

具体的には、ログ ファイルは、ハイライトした場所に GPU コア クロックとメモリ クロックの行を 1 秒ごとにテキスト ファイルに追加します。これらの更新された値を取得し、CrystalControl2 を介して LCD 画面のフィールドに表示します。ソフトウェアの競合と、LCD に表示したいすべての情報を参照するためにいくつかの異なるプログラムを実行することの両方を回避するために、CrystalControl2 から簡単にアクセスできる他のソフトウェアをインストールせずにこれらの値を取得しようとしています。

先ほど言ったように、これらの数字は 3 桁または 4 桁の数字になりますが、これは可能なのでしょうか?

答え1

明らかに、CrystalControl2の正規表現フォーマットに関するドキュメントは不足しています。しかし、私が調べたところによると、とても私が見つけた例はいくつかありますが、必要なテキストを抽出すべくグループ化を使用しています。グループ数が多いものもあれば少ないものもありますが、その理由はわかりませんでした。しかし、MSI Afterburner ログの数字と一致する正規表現を試してみました。

\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$

どうやって?

では、これを分解してみましょう。行末アンカー($)があるので、最後から逆方向に作業します。

  1. $- 行の末尾にアンカーします。

    ただし、例から判断すると、これはファイルの末尾に固定されるように見えます。

  2. [^,]*- 0個以上の何かに一致するしかしカンマ

  3. \.- ドット(小数点)と一致します。

    は正規表現では特殊であり、何にでも一致することを意味するため\必要です。 は単なるドットになります。.\

  4. (\d+)- 1 つ以上の数字を一致させ、 でグループ化します()

    グループにより、一致結果を抽出できます。

  5. ,[^0-9,]*- カンマの後に0個以上の数字以外の文字またはカンマが続く文字列に一致します

  6. \.[^,]*- ドットの後に0個以上の非コンマが続くものを検索します

  7. \D+(\d+)- 1つ以上の数字以外の文字の後に1つ以上の数字が続く文字を検索し、数字をグループ化します。

テスト:

LCD やその SW にアクセスできないため、次のように Perl を使用してテストしました。

cat file1 | perl -lpe 's/\D+(\d+)\.[^,]*,[^0-9,]*(\d+)\.[^,]*$/:::: \1 xxx \2/'

試験結果:

80, 21-06-2017 20:42:27, 16.000:::: 1392 xxx 4714
80, 21-06-2017 20:42:28, 6.000:::: 860 xxx 810
80, 21-06-2017 20:42:29, 7.000:::: 860 xxx 810
80, 21-06-2017 20:42:30, 7.000:::: 354 xxx 405

:::正規表現は、との間からわかるように、行の最後の2つの数字を見つけました。xxx

コメントからの結果の更新

結果

答え2

さて、何を試しましたか?

ぜひご覧になってみてくださいニンブルテキスト、かなり使いやすい

あなたの問題を完全に理解しているわけではありませんが、さらに役立つようにここにスニペットを作成しました。

http://nimbletext.com/Live/-176683481/

<% ($3 > 100 && $3 < 9999) ? $3 : '' %> | <% ($4 > 100 && $4 < 9999) ? $4 : '' %>

お役に立てれば幸いです

関連情報