2017-04-13 3 views
0

テキストファイルから値を取り出し、それを達成するためにループ内の変数に割り当てる必要があります。 data.textファイルには、私は、次の値の年齢を取ると$ageに割り当て、このから名前を選択し、$name に割り当てる2列ファイルから値をフェッチして変数に代入してループ内で実行する方法

 
Name, Age 
ABC , 31 
def , 41 
ghi  , 51 

が含まれています。私はファイルの終わりまでシーケンスでこれらをフェッチします。

は私がforeach &ラインを使用してみましたが、おそらくこれは、正規表現またはリストが、

CSVのように見えるのサンプルプログラム

答えて

1

で助けてください、それを使用する方法がわからないを使用することにより可能である完全なラインを取得することができファイル。そのためにproper CSV parserを使用します。 Tclの8.6で

package require csv 

set f [open "data.text"] 

# Skip the header line; we could parse it, but we won't 
gets $f 

# Parse the remaining lines 
while {[gets $f line] >= 0} { 
    lassign [csv::split $line] name age 
    # Your data has extra spaces in it, it seems; we deal with that here 
    set name [string trim $name] 
    set age [string trim $age] 
    # Now we'll do something with that 
    puts "name is '$name', age is '$age'" 
} 
close $f 

、あなたはより直接的にトリミングを統合することができます:

lassign [lmap value [csv::split $line] {string trim $value}] name age 

しかし、それは純粋に洗練ます。 (8.5およびlmapを持っていない前に、あなたforeachでそれを書くことができるというように、しかし、本当のポイントはありません;。ちょうど2つのフィールドがあるとき、あなたはそれなしで直接、十分なコードを書くことができます)あなたのための

+0

感謝助けて。しかし残念なことに私のソフトウェアにはcsvパッケージがバンドルされていません。私は上記のコードを使用することができません。これを解決する他の方法はありますか?私は以下のコードを使用しましたが、名前と年齢を個別に配置することはできませんでした。私のコードは行全体を読み込み、名前と年齢のテキストボックスに配置します。名前[open data.txt r] ファイルのデータを設定します[read $ Name] foreach行$ file_data { -widget m_Name -value $ line #Entering Name inテキストボックス set -widget m_Age -value $ line } – Raj

+0

こんにちは、私の質問に答えました。以下を参照してください。しかし、依然として全額があなたに行きます。ご協力いただきありがとうございます。は、 "a = $ Name b = $ Name"を配置します。 file_open – Raj

関連する問題