web-dev-qa-db-ja.com

Node.js .txtファイルに行を書き込む

Node.jsを使用して、過去の行の前の行をtxtファイルに出力する単純なログシステムを作成したいのですが、Node.jsのファイルシステムがどのように機能するかわかりません。誰かがそれを説明できますか?

35
Meterion

テキストファイルの途中にデータを挿入するのは簡単な作業ではありません。可能であれば、ファイルの最後に追加する必要があります。

テキストファイルにデータを追加する最も簡単な方法は、組み込みの fs.appendFile(filename, data[, options], callback) function from fs module を使用することです。

var fs = require('fs')
fs.appendFile('log.txt', 'new data', function (err) {
  if (err) {
    // append failed
  } else {
    // done
  }
})

ただし、ログファイルにデータを数回書き込む場合は、代わりに fs.createWriteStream(path[, options]) function を使用するのが最善です。

var fs = require('fs')
var logger = fs.createWriteStream('log.txt', {
  flags: 'a' // 'a' means appending (old data will be preserved)
})

logger.write('some data') // append string to your file
logger.write('more data') // again
logger.write('and more') // again

Nodeは、.writeを呼び出すたびに、アプリケーションが閉じられるまで、または.endを呼び出すストリームを手動で閉じるまで、ファイルに新しいデータを追加し続けます。

logger.end() // close string
81

ステップ1

小さなファイルがある場合は、すべてのファイルデータをメモリに読み込みます。

ステップ2

ファイルデータ文字列を配列に変換します

ステップ

配列を検索して、テキストを挿入する場所を見つけます

ステップ4

場所が決まったら、テキストを挿入します

yourArray.splice(index,0,"new added test");

ステップ5

配列を文字列に変換します

yourArray.join("");

ステップ6

あなたのファイルをそう書きます

fs.createWriteStream(yourArray);

ファイルが大きすぎる場合はお勧めしません

2
Yene Mulatu

単にfsモジュールと次のようなものを使用します。

fs.appendFile('server.log', 'string to append', function (err) {
   if (err) return console.log(err);
   console.log('Appended!');
});
2
michelem

「Winston」ログを使用してデータをテキストファイルに出力するログファイルを作成しました。ソースコードは以下のとおりです。

const { createLogger, format, transports } = require('winston');
var fs = require('fs')
var logger = fs.createWriteStream('Data Log.txt', {`
flags: 'a' 
})
const os = require('os');
var sleep = require('system-sleep');
var endOfLine = require('os').EOL;
var t = '             ';var s = '         ';var q = '               ';
var array1=[];
var array2=[];
var array3=[];
var array4=[];

array1[0]  =  78;`
array1[1]  =  56;
array1[2]  =  24;
array1[3]  =  34;

for (var n=0;n<4;n++)
{
array2[n]=array1[n].toString();
}

for (var k=0;k<4;k++)
{
array3[k]=Buffer.from('                    ');
}

for (var a=0;a<4;a++)  
{
array4[a]=Buffer.from(array2[a]);
}

for (m=0;m<4;m++)
{
array4[m].copy(array3[m],0);
}

logger.write('Date'+q);
logger.write('Time'+(q+'  '))
logger.write('Data 01'+t);
logger.write('Data 02'+t); 
logger.write('Data 03'+t);
logger.write('Data 04'+t)

logger.write(endOfLine);
logger.write(endOfLine);
enter code here`enter code here`
}

function mydata()      //user defined function
{
logger.write(datechar+s);
logger.write(timechar+s);
for ( n = 0; n < 4; n++) 
{
logger.write(array3[n]);
}
logger.write(endOfLine); 
}

for (;;)
}
var now = new Date();
var dateFormat = require('dateformat');
var date = dateFormat(now,"isoDate");
var time = dateFormat(now, "h:MM:ss TT ");
var datechar = date.toString();
var timechar = time.toString();
mydata();
sleep(5*1000);
}
0
ISURU THIWANKA