2014-02-07 57 views
-2

我想要做的是: 我有一個文件(我們稱之爲a.txt)變量: name.gender.age 我想提取名稱並根據性別和年齡添加一定的文本並將所有內容保存在另一個文件中(a_done.text) 從哪裏開始?TCL(或python)中的文件和字符串操作

感謝所有的投入 我會盡量解釋我想要什麼: 我有變量的文件由名稱,屬性和長度(下手,我想我可以擴展它,如果我已經定義一個簡單的版本) ,我要提取這些變量和基於屬性我想生成內容(S):

這裏是什麼,我想它做一個粗略的草圖:

  1. 打開文件
  2. 排序值ba sed的物業
  3. 產生具有不同屬性變量的每一個可能的組合,這樣的文字:

    if "var1" has "value1" and "var2" has "value2" then return :"true/false" 
    var1 is with property x 
    var 2 is with property y 
    
  4. 保存這一切在一個文件中,文件格式,我定義

+2

開始通過給輸入 – justintime

+1

開始編制的例子向我們展示你迄今爲止 –

+0

謝謝所有的投入,我會盡量解釋什麼嘗試我想要:我有一個文件,其中包含由名稱,屬性和長度定義的變量(如果我有一個簡單的版本,我認爲我可以擴展它),並且我想提取這些變量並基於屬性喜歡生成內容: – user2528060

回答

0

它全部取決於文件的格式,但是如果您的文件格式是這樣的:

 
name: Fungo the Fruitbat God 
gender: 75.3% 
age: older than Methuselah 

然後你就可以讀取到TCL,調整值,並將它寫入與再背出來:

# Read in 
set filename "a.txt" 
set f [open $filename] 
foreach line [split [read $f] "\n"] { 
    if {[regexp {^(\w+): (.*)$} $line -> key value]} { 
     dict set record $key $value 
    } 
} 
close $f 

# Adjust 
dict set record age 12345 
dict set record gender "bent" 

# Write out 
set f [open $filename w] 
dict for {key value} $record { 
    puts [format "%s: %s" $key $value] 
} 
close $f 

的原則是任何編輯簡單的文本記錄格式相同。將它讀入並解析爲抽象數據結構,調整該數據結構中的值,以原始格式寫回。如果你正在做很多事情,請考慮使用數據庫。他們很多更好!

0

我想,你的文件格式是,即每個新行包含NAME.GENDER.AGE ,以便用逗號分隔值。

你只需要打開文件,逐行閱讀和分析你的輸入,如果通過,那麼你應該把它寫入你的a_done.text

Python的例子:



    fr = open("a.txt", "r") 
    fo = open("a_done.txt", "w") 

    for line in fr.readlines(): 
     parsed = line.split(".") 

     # now you have list [name, gender, age] 
     # TODO: compare it to th requested ones 
     okay = # True/False comaprison result 

     if (okay): 
      fw.write("Name: %s" % parsed[0]) 
    fo.close() 
    fw.close() 

但如果文件太大,你應該逐行閱讀我認爲,即



    while True: 
     line = fr.readline() 
     if line: 
      print line 
     else: 
      break 

0

如果你的文件格式字面上是「name.gender。年齡」(用點分隔的字段),你可以這樣做:

set fin [open a.txt r] 
set fout [open a_done.txt w] 

while {[gets $fin line] != -1} { 
    lassign [split $line "."] name gender age 
    # do stuff with $gender and $age to populate $newtext 
    puts $fout "$line.$newtext" 
done 

close $fin 
close $fout