2017-01-20 3 views
1

特定のキーワードに従ってファイルの設定で情報を取得する必要があります(フォーマットを変更できません)。ファイルは次のようになります:ファイルから読み込んで特定の行を探します

username=myusername 
address=156a1355e3486f4 
data=function(i){if (i!=0) return true; else return false;} 

システムは<key>=<value>\nです。値の部分には=、スペースまたはその他の文字がありますが、改行はできません。キーはユニークです(「キー部分」では値に表示されますが、\nkey=はすべてのキーのファイルに1回しか表示されません)。シェルスクリプトで

、私はこのような私の値を見つける:

username=`grep ^username file.txt | sed "s/^username=//"` 

Grepのはusername=someusernameを返し、sedのでしょう値のみを残し、何もキーと=を置き換えます。

node.jsには、にアクセスして、ファイル内のデータのにアクセスします。たとえば、アドレスとデータの値が必要です。

node.jsでどうすればいいですか? fs.readFile(file.txt)の後に私は何をすべきかわかりません。私はsplitを使用しなければならないと思うが、\nを使用することは最良の選択肢ではないようだ、多分正規表現は助けることができるだろうか?

\nkey=で始まり、最初に\nで終わる部分文字列を見つける」ことが理想的です。値を見つけるために簡単に分割できます。

+0

オブジェクトに解析しますか?それは簡単だろう。 –

答えて

1
// @text is the text read from the file. 
// @key is the key to find its value 
function getValueByKey(text, key){ 
    var regex = new RegExp("^" + key + "=(.*)$", "m"); 
    var match = regex.exec(text); 
    if(match) 
     return match[1]; 
    else 
     return null; 
} 

例:

fs.readFile('file.txt', { encoding : 'utf8' }, data => { 
    const settings = data 
    .split('\n') 
    .reduce((obj, line) => { 
     const splits = line.split('='); 
     const key = splits[0]; 
     if (splits.length > 1) { 
     obj[key] = splits.slice(1).join('='); 
     } 
     return obj; 
    }, {}); 
    // ... 
}); 

splitreduceを使用して

// text should be obtained using fs.readFile... 
 
var text = "username=myusername\naddress=156a1355e3486f4\ndata=function(i){if (i!=0) return true; else return false;}"; 
 

 

 
function getValueByKey(text, key){ 
 
    var regex = new RegExp("^" + key + "=(.*)$", "m"); 
 
    var match = regex.exec(text); 
 
    if(match) 
 
     return match[1]; 
 
    else 
 
     return null; 
 
} 
 

 
console.log("adress: ", getValueByKey(text, "address")); 
 
console.log("username: ", getValueByKey(text, "username")); 
 
console.log("foo (non exist): ", getValueByKey(text, "foo"));

+0

ありがとう!私は正規表現が行く方法であることを知っていた。私の質問を書くことで、私は 'text.match(regex)'を使って解決策を見つけ出すことができました。 "理想的なこと"の部分を書くことで正規表現が得られました。 –

0

、あなたはそのような何かを行うことができます設定はキー/値としてsettingsオブジェクトに保存されます。

関連する問題