2016-10-18 11 views
-1

は私が VALUE_LISTキーの値を取得し、バッチスクリプトを使用して平均を見つけたい、このキーと数値の配列を使用して文字列を分割することはできますか?

response_list { time_range_stat { start_time_usecs: 1476763290000000 sampling_interval_secs: 30 value_list: 0 value_list: 1000000 value_list: 1000000 value_list: 205759 value_list: 139172. . . } } 

などのデータを含むテキストファイルをしました。

これは可能ですか?

可能であれば、私に助言してください。

+0

これはJSONであるはずですか?データは真に値を区切るスペースだけを持つ単一の行にありますか? – rojo

+0

常に5つの値リストがありますか?最後のものの後にはいつも期間がありますか? – Squashman

+0

@スカッシュマンいいえ、ありません。いくつかのファイルには、数百のvalue_listキーが含まれています。 – kosterz

答えて

2

十分なビールがあれば何でも可能です。 read about string manipulationにお伝えします。将来的には、自分で問題を解決しようとしたことを示すコードを投稿する必要があります。

今のところ、下記のスクリプトが十分にあなたを始めてくれるでしょう。文字列操作では、データが上記のフォーマットと一致することが期待されます。実際にデータの終わりを示す省略記号がない場合は、. . .を10行目の}に置き換えます。

また、バッチ演算は32ビット符号付き整数に制限されています。合計value_list値の合計値が2147483647を超えると、誤った値が返されます。別のスクリプト言語が望ましいかもしれません。

幸運を祈る!

@echo off & setlocal 

rem // populate %data% variable 
set /P "data=" <"text file that contains the data.txt" 

rem // strip everything prior to the first value_list 
set "data=%data:* value_list: =%" 

rem // strip everything after the ellipses. 
set data=%data:. . .=&rem;% 

rem // init counters 
set /a values=0, total=0 

rem // replace "value_list:" with a delimiter that can be split by "for" 
for %%I in (%data: value_list: =;%) do set /a values += 1, total += %%I 

rem // average values. Note: Batch math rounds the result to the nearest integer. 
set /a avg = total/values 

rem // output result 
echo average: %avg% 
+1

に最初のフレーズだけを加えたもの! ** ':)' ** – Aacini

+0

@rojoそれは働いている! 、 どうもありがとうございました。私は今あなたにビールを借りています。 – kosterz

+0

@kosterz私の答えが役に立ったら、それを合格とマークすることを検討してください。なぜこのことが重要であるかについては、[このページを見る](http://meta.stackexchange.com/questions/5234/)を参照してください。 – rojo

関連する問題