2017-10-09 42 views
0

構文sed.Iを理解してください。一重引用符は削除されましたが、コードはまだ動作しません。TCLスクリプト内のSedコマンド

set id [open file.txt] 
# send the request, get a lot of data 
set tok [::http::geturl "http://example.com"-channel $id] 
# cut out the necessary data between two words 
exec sed s/{"data1":\(.*\)/data2\1/ $id 
close $id 
set ir [open file.txt] 
set phone [read $ir] 
close $ir 
puts $phone 

問題は、私は言語の構文の要素で、次のようなもの

{"id":3876,"form":"index","time":21,"data":"2529423","service":"Atere","response":"WAIT"} 

ブレースのクエリからデータを取得し、私が間に正確に値をカットする必要があるということです単語と中括弧。これをスクリプトに実装する方法。

+0

44 Q/Asここで検索する'sed [tcl]'を使っています。いくつかは非常に有望に見えます。必要な出力を表示するためにQを更新することをお勧めします。がんばろう。 – shellter

答えて

1

あなたのコードは、(a)ファイルハンドルをsedコマンドに渡しているので、むしろ混乱します。それはうまくいかないでしょう。 (b)出力チャネルではなく、入力チャネルをhttpに渡しています(書き込み用にファイルを開こうとしてください)。

根本的な問題について 図のように基本的なJSONデータを受け取っている場合。 HTTP処理のために

:Tclは辞書

# Assuming the JSON data is in the $data variable, and there's no 
# other data present. This also assumes the data is very basic 
# there are no embedded commas. Many assumptions means this 
# code is likely to break in the future. A JSON parser would 
# be a better choice. 
set data "\{" 
append data {"id":3876,"form":"index","time":21,"data":"2529423","service":"Atere","response":"WAIT"} 
append data "\}" 
regsub -all {[{}:",]} $data { } data 
set mydatadict $data 
puts [dict get $mydatadict id] 

編集として解析できる形式に変換する)tcllib's json module

B:

A)あなたは、JSONパーサーを使用することができます:

set tok [::http::geturl "http://example.com"] 
set data [::http::data $tok] 
::http::cleanup $tok 
+0

はい、別のリソースで、これも示されました。答えをありがとう。そして、ファイルから辞書にテキストを追加するにはどうしたらいいですか?または、httpクエリから直接アクセスする方が良いでしょうか? – Lefeofan

+0

多くの感謝!私はあなたのアドバイスに従って、それはすべて働いた。 – Lefeofan

+0

多くの疑わしいブランクを追加しない可能性のある代替手段は、 'set data [regexp -all -inline {[^" {}:} +} $}] '空白は' dict'もちろん、キーや値に空白が含まれている場合は、もっと賢いことが必要です。 –

関連する問題