2017-03-31 19 views
1

文字列に日付を含む行を印刷したい、私はそのタスクを達成するために分割モジュールを使用しています。以下のコードは常にelse文を出力します。特定の文字列を含む行を印刷する方法は?

ctrl.js

fs.readFile(dir + '/' + logFile, 'utf8', function(err, data) { 
     var lines = data.split('\n'); 
     var linesWithDate = lines.split('|')[0].replace(/[\[\]']+/g,''); 
     lines.forEach(function(line) { 
      if (linesWithDate) { 
       console.log('print lines with date',line); 
      } else { 
       console.log('print lines without date',line); 
      } 
     } 
    }); 

ファイルデータの特定の文字列を含む行を出力する方法

[2017-03-23T18:13:16Z]|zlpv7490|verbose|bmid: n/a|infra.topicWorkers|topology changed, emitting topology event lorem ipsum 
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy 
[2017-03-23T19:20:16Z]|zlpv7490|verbose|bmid: n/a|infra.topicWorkers|topology changed, emitting topology event lorem ipsum 
+0

正規表現を試しましたか? 正規表現のJavaScriptドキュメントへのリンクです。 https://developer.mozilla.org/ro/docs/Web/JavaScript/Guide/Regular_Expressions – PianoSong

+0

少なくとも40年間睡眠中にこれを行うことができたgrepの使用には問題がありますか? –

+0

@torazaburo私はgrepを使ったことがありません。 – hussain

答えて

1

const split = require('split'); 
fs.createReadtStream(path.join(dir, logFile), 'utf8') 
    .pipe(split()).on('data', (line) => { 
    if (line.indexOf('string') > -1) { 
     console.log('Line with string:', line); 
    } else { 
     console.log('Line without string:', line); 
    } 
}); 

私は私がそのタスクを達成するために、分割モジュールを使用しています、文字列に日付を含む行を印刷したいです。以下のコードは常にelseステートメントを出力しています

私はあなたがsplitモジュールを使用していたとは思いません。この例ではありません:それは2017-13-13のような日付と一致することがあり、これは必ずしも...、有効な日付でないこと

const split = require('split'); 
const regex = require('regex-iso-date'); 
fs.createReadtStream(path.join(dir, logFile), 'utf8') 
    .pipe(split()).on('data', (line) => { 
    if (regex().test(line)) { 
     console.log('Line with date:', line); 
    } else { 
     console.log('Line without date:', line); 
    } 
}); 

注 - これだけの答えを参照してください有効な日付をテストする:

それとも、[2017-03-23T18:13:16Z]のような特定の文字列を一致させたい場合、あなたはこのような何かしてみてください可能性があります

を210

ファイルに無効な日付が含まれている場合は、無効な日付と一致することに注意してください。

+0

私はこのタスクを達成するために分割パッケージを使うことができます – hussain

+0

私はsplitとregexモジュールを使用して私のコードに2番目の答えを追加しました 'console.log( '日付なしの行:'、行)' 'すべての行を表示 – hussain

+0

@ hussain正規表現があまりにも厳しいかもしれません。 3番目の例を参照してください。私は自分の答えを更新しました。 – rsp

0

有効な解析された日付のみを1行ずつ出力するコードです。私はreadfileの代わりにreadlineモジュールを使用していますが、代わりにinput: process.stdin: 'use strict'を置き換えることで簡単にロジックを適応させることができます。

var sExample = '[2017-03-23T18:13:16Z]|zlpv7490|verbose|bmid: n/a|infra.topicWorkers|topology changed, emitting topology event lorem ipsum'; 

const readline = require('readline'); 
const rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 

rl.setPrompt('Enter example string to test > '); 
rl.prompt(); 

rl.on('line', (line) => { 
    var sCandidate = line.split('|')[0].replace(/[\[\]']+/g,''); 

    if (Date.parse(sCandidate)) {     //it is a valid date 
    console.log(sCandidate); 
    } 

    process.exit(0); 
}); 
関連する問題