2012-12-26 16 views
2

比方說,我有一個名爲test.txt包含以下內容的文本文件:Javascript:如何從文本文件的特定部分加載數據?

Apples.Purchased: 100 
Oranges.Purchased: 202 
Bananas.Purchased: 140 

我如何搜索「Oranges.Purchased」的文本文件,抓住它後面的數值,並將其應用到javascript變量?

爲了記錄在案,我使用fs.write保存數據:

var fs = require('fs'); 
fs.writeFile("test.txt", outputdata, function(err) { 
     if(err) { 
     console.log(err); 
     } else { 
      console.log("The file was saved!"); 
     } 
}); 
+7

如果您自己編寫文件,爲什麼不使用JSON開始呢?可能會使搜索不必要。 – Lucas

+0

我還沒有和Node.js一起工作,所以我不知道是否有插件可以讀取文本,但是從Javascript的角度來看,您可以使用正則表達式來讀取字符串的特定部分。 http://lawrence.ecorp.net/inet/samples/regexp-intro.php –

+0

完全同意盧卡斯。你真的應該考慮** JSON **。將使閱讀(和寫作)的方式更容易。一旦你已經將JSON文件內容解析成一個JS對象,閱讀可以像'object'['Oranges'] ['Purchased']'一樣簡單(取決於你寫出來的方式) – techfoobar

回答

1

您可以在文本閱讀該文件,然後使用正則表達式來找到你的文字:

fs.readFile("test.txt", function(err, data){ 
    var regex = /^Oranges.Purchased: ([0-9]+)/; 
    var result = regex.exec(data); 
    console.log(result[1]); 
}); 

雖然你會想要防彈(檢查錯誤,不要假設你找到了文本等)。

但我不建議一般的方法。爲什麼不寫在文件JSON:

{ 
    "Apples": { 
    "Purchased": 100 
    }, 
    "Oranges": { 
    "Purchased": 140 
    } 
    "Bananas": { 
    "Purchased": 202 
    } 
} 

可以生成並沒有任何字符串扯皮分析;你可以序列化你的對象。

+1

你在regex文字前不需要'new'。 – loganfsmyth

+0

從技術上講,該示例不是有效的JSON,因爲JSON需要引用屬性。但是一個JSON庫會照顧到這一點。 –

+0

使用'新的正則表達式(...)'或乾脆'/.../' – techfoobar

0

解析爲JSON是這裏的理想解決方案。

但是,讓我扮演惡魔主張並提供非json解決方案,它只是逐行掃描文件,將關鍵字與目標值進行比較。如果它們匹配,那麼我們將該值賦給一個變量。

當然,這裏假定數據格式嚴格按照您在此處顯示的格式。也就是說,對於每一行,都有一個(關鍵字:值)對。否則,這可能會增加。

target = 'Oranges.Purchased' 
value_to_save = None 
file = open('/tmp/contents.txt', 'r') 

for i in file.readlines(): 
    value_pair = i.split(':') 
    if value_pair[0].strip('') == target: 
     value_to_save = value_pair[1].strip('') 
     break 

print value_to_save 
相關問題