Javascript:如何从文本文件的特定部分加载数据?
假设我有一个名为test.txt的文本文件,其中包含以下内容:Javascript:如何从文本文件的特定部分加载数据?,javascript,node.js,Javascript,Node.js,假设我有一个名为test.txt的文本文件,其中包含以下内容: Apples.Purchased: 100 Oranges.Purchased: 202 Bananas.Purchased: 140 如何在文本文件中搜索“Oranges.Purchased”,获取其后面的数值并将其应用于javascript变量 作为记录,我使用fs.write保存数据: var fs = require('fs'); fs.writeFile("test.txt", outputdata, function(
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!");
}
});
您可以将文件读取为文本,然后使用正则表达式查找文本:
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
}
}
可以生成和解析,而无需任何字符串争用;您可以将对象序列化。解析为JSON是理想的解决方案 但是,让我来扮演devils advocate的角色,并提供非json解决方案,它只是逐行扫描文件,将关键字与目标值进行比较。如果它们匹配,那么我们将该值赋给一个变量 当然,这假设数据格式严格如您在这里所示。也就是说,对于每一行,都有一个(关键字:Value)对。如果不是这样,这可能会提高成本
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
如果您自己编写文件,为什么不先使用JSON呢?可能不需要搜索。我没有使用Node.js,所以我不知道是否有用于读取文本的插件,但从Javascript的角度来看,您可以使用正则表达式读取字符串的特定部分。我完全同意卢卡斯。你真的应该考虑JSON。这将使阅读(和写作)更加容易。一旦你将JSON文件内容解析成JS对象,阅读就可以像
object['Oranges']['Purchased']
(当然取决于你是如何写出来的)@Erik你能接受一些答案吗?你不需要在regex文本之前添加new
。从技术上讲,这个例子不是有效的JSON,因为JSON需要引用属性。但是JSON库可以解决这个问题。使用新的正则表达式(…)
或者简单地/…/
啊,谢谢,修复了。是的,我从new RegExp()
切换到了文字语法,最后在两者之间写了一些东西。我还更改了JSON语法。谢谢大家。转换为JSON。我已经知道这会让一切变得更容易。