2017-08-22 22 views
2

テキストファイルのバッチから抽出するテーブルがあります。問題は、テーブルがすべてのテキストファイルの同じ行で始まらないことです。また、プレゼンテーション、フォーマット、およびキーワードの再利用は、本当に(少なくとも私のための)正規表現を書くことは困難です。私はどのように特定の行から情報を抽出するかを考え出しましたが、この表は私のためのものではありません。私は正規表現と分割を研究しましたが、空になっています。PowerShellを使用してテキストファイルからテーブルを抽出する

ファイルの先頭は次のようになります。

 
Summary Call Volume Statistics: 

Total Calls = 1000 
Total Hours = 486.7 
Average Call Frequency = 2.05 

Summary Reliability Statistics: 

Total Queued Calls = 152 
Total Calls = 1000 
Total On Time Calls = 710 
Total Reliability = 0.7100 
Total Raw Demand = 640.00 
Total Covered Demand = 437.79 

Summary Business Statistics: 

Total Servers = 4 
Total Sim Time (secs) = 1752079 
Total Server Time (secs) = 7008316 
Total Server Busy Time (secs) = 0 
Total Business = 0.0000 

Detail Node Sim Reliability: 

    Node  Calls  On Time  Percent  Queued  UnderTm  OverTm 
-------- -------- -------- -------- -------- -------- -------- 
     0   97   81  0.8351   17  1637404   0 
     1   115   92  0.8000   25  1637404   0 
     2   103   90  0.8738   16  1637404   0 
     3   68   53  0.7794   17  1637404   0 
     4   63   57  0.9048   6  1637404   0 
     5   35   29  0.8286   7  1637404   0 
     6   31   27  0.8710   4  1637404   0 
     7   40   36  0.9000   6  1637404   0 
     8   22   17  0.7727   5  1637404   0 
     9   26   24  0.9231   1  1637404   0 
     10   24   21  0.8750   3  1637404   0 
     11   23   0  0.0000   5  1637404   0 
     12   23   20  0.8696   2  1637404   0 
     13   15   0  0.0000   2  1637404   0 
     14   20   19  0.9500   1  1637404   0 
     15   19   0  0.0000   1  1637404   0 
     16   23   18  0.7826   4  1637404   0 
     17   12   9  0.7500   4  1637404   0 
     18   10   10  1.0000   0  1637404   0 
     19   11   0  0.0000   1  1637404   0 
     20   13   0  0.0000   2  1637404   0 
     21   9   7  0.7778   1  1637404   0 
     22   11   9  0.8182   1  1637404   0 
     23   11   0  0.0000   2  1637404   0 
     24   14   6  0.4286   3  1637404   0 
     25   6   6  1.0000   0  1637404   0 
     26   6   0  0.0000   0  1637404   0 
     27   4   0  0.0000   1  1637404   0 
     28   5   5  1.0000   0  1637404   0 
     29   12   10  0.8333   1  1637404   0 
     30   12   11  0.9167   1  1637404   0 
     31   4   2  0.5000   2  1637404   0 
     32   8   8  1.0000   0  1637404   0 
     33   4   4  1.0000   0  1637404   0 
     34   6   0  0.0000   0  1637404   0 
     35   11   10  0.9091   1  1637404   0 
     36   7   0  0.0000   1  1637404   0 
     37   5   0  0.0000   2  1637404   0 
     38   5   0  0.0000   0  1637404   0 
     39   8   0  0.0000   2  1637404   0 
     40   6   6  1.0000   0  1637404   0 
     41   9   7  0.7778   2  1637404   0 
     42   4   1  0.2500   1  1637404   0 
     43   8   5  0.6250   1  1637404   0 
     44   1   1  1.0000   0  1637404   0 
     45   2   0  0.0000   0  1637404   0 
     46   5   4  0.8000   0  1637404   0 
     47   6   5  0.8333   0  1637404   0 
     48   3   0  0.0000   0  1637404   0 
     49   3   0  0.0000   0  1637404   0 
     50   2   0  0.0000   0  1637404   0 
     51   3   0  0.0000   1  1637404   0 
     52   2   0  0.0000   0  1637404   0 
     53   3   0  0.0000   0  1637404   0 
     54   2   0  0.0000   0  1637404   0 
-------- -------- -------- -------- -------- -------- -------- 
    Total:  1000   710  0.7100   152  1637404   0 

以降のファイルでは、この表があります:

 
Comparable Node Alpha Reliability: 

    Node  Raw Dem Sim Rely  Wtd Cov 
-------- -------- -------- -------- 
     0  71.0000  0.8351  59.2887 
     1  62.0000  0.8000  49.6000 
     2  56.0000  0.8738  48.9320 
     3  39.0000  0.7794  30.3971 
     4  35.0000  0.9048  31.6667 
     5  21.0000  0.8286  17.4000 
     6  20.0000  0.8710  17.4194 
     7  19.0000  0.9000  17.1000 
     8  17.0000  0.7727  13.1364 
     9  17.0000  0.9231  15.6923 
     10  16.0000  0.8750  14.0000 
     11  15.0000  0.0000  0.0000 
     12  14.0000  0.8696  12.1739 
     13  12.0000  0.0000  0.0000 
     14  12.0000  0.9500  11.4000 
     15  11.0000  0.0000  0.0000 
     16  10.0000  0.7826  7.8261 
     17  10.0000  0.7500  7.5000 
     18  9.0000  1.0000  9.0000 
     19  9.0000  0.0000  0.0000 
     20  9.0000  0.0000  0.0000 
     21  8.0000  0.7778  6.2222 
     22  8.0000  0.8182  6.5455 
     23  8.0000  0.0000  0.0000 
     24  8.0000  0.4286  3.4286 
     25  7.0000  1.0000  7.0000 
     26  6.0000  0.0000  0.0000 
     27  6.0000  0.0000  0.0000 
     28  6.0000  1.0000  6.0000 
     29  6.0000  0.8333  5.0000 
     30  6.0000  0.9167  5.5000 
     31  5.0000  0.5000  2.5000 
     32  5.0000  1.0000  5.0000 
     33  5.0000  1.0000  5.0000 
     34  5.0000  0.0000  0.0000 
     35  5.0000  0.9091  4.5455 
     36  5.0000  0.0000  0.0000 
     37  4.0000  0.0000  0.0000 
     38  4.0000  0.0000  0.0000 
     39  4.0000  0.0000  0.0000 
     40  4.0000  1.0000  4.0000 
     41  4.0000  0.7778  3.1111 
     42  4.0000  0.2500  1.0000 
     43  4.0000  0.6250  2.5000 
     44  3.0000  1.0000  3.0000 
     45  3.0000  0.0000  0.0000 
     46  3.0000  0.8000  2.4000 
     47  3.0000  0.8333  2.5000 
     48  3.0000  0.0000  0.0000 
     49  3.0000  0.0000  0.0000 
     50  3.0000  0.0000  0.0000 
     51  2.0000  0.0000  0.0000 
     52  2.0000  0.0000  0.0000 
     53  2.0000  0.0000  0.0000 
     54  2.0000  0.0000  0.0000 
-------- -------- -------- -------- 
          Total: 437.7852 

私は配列として2つの中間の列を保存できるようにする必要がありますいくつかの計算を行うために。

これをPowerShellでどうやって行うのですか?私はすでに(一般名の変更で)作品次のコードを持っている:

foreach ($file in $files) { 
    $fullName = [IO.Path]::GetFileNameWithoutExtension($file) 
    $CR = $fullName.Split("CRAPTFV")[-2] 
    $CT = $fullName.Split("CRAPTFV")[-3] 
    $P = $fullName.Split("CRAPTFV")[-4] 
    $A = $fullName.Split("CRAPTFV")[-5] 
    $S = $fullName.Split("CRAPTFV")[-6] 
    $CV = $fullName.Split("CRAPTFV")[-7] 

    $DEM = Select-String -Path $file -Pattern("Total Covered Demand = (\d*.?\d*)") 

    $REL = Select-String -Path $file -Pattern("\d+\t+\s+(\d+\.{1}\d+)\t+\s+(\d\.{1}\d+)\t+\s+(\d+.{1}\d+)") -AllMatches 

    Write-Output "$CT,$CR,$CV,$S,$A,$P,$DEM.Matches.groups[1]" | Out-File "fileadress" -Append 
} 

目標は、いくつかの測定値を計算して、出力ファイルに追加する各ファイルからテーブルを使用することです。私は$ RELでそれらをヤンクしているように見えると私は、このコード

$REL = Select-String -Path $file -Pattern("\d+\t+\s+(\d+\.{1}\d+)\t+\s+(\d\.{1}\d+)\t+\s+(\d+.{1}\d+)") -AllMatches 
Write-Host $REL.Matches 

ですべての値を見ることができます。しかし、私は次のように入力したときに、私は唯一の各ファイルの最初の値を見ることができます。すべてのファイルの

 
71.0000 
71.0000 
71.0000 
71.0000 
71.0000 
71.0000 

:この

Write-Host $REL.Matches.Groups[1] 

はこれを生成します。

+0

私にとっては十分に明確ではありません。まず、元のファイルをダウンロードする場所を教えてください。次に、各ファイルから抽出する内容を説明できますか? (あなたの過去のテキストにはタブがありませんので正規表現は有効ではありません) – JPBlanc

+0

基本的に、2番目と3番目の列を2番目のテキストスニペットの4列テーブルから抽出しますか?ファイルに4列のテーブルがありますか? –

答えて

1

私は4つのスペースがここにタブを与えることを想像した場合$REL使用する方法です:ファイルの

$REL.matches[0].Groups[2].Value gives 0.8351 
$REL.matches[1].Groups[3].Value gives 49.6000 

$REL.matches[X].Groups[Y].ValueXラインのY番目の列のセルを与えます。 XYは0から開始します。