#javascript #node.js #logic #file-handling
#javascript #node.js #Логические #обработка файлов
Вопрос:
Я не могу решить следующую проблему с обработкой файлов в NodeJS: у меня есть файл emp.txt который содержит данные сотрудника в фиксированном размере записи в следующем формате:
EmpID:Name:Dept:Salary
1001:Harry:Sales:23000
1002:Sarita:Accounts:20000
1003:Monika:TechSupport:35000
Read the file. Display sum of salary of all employees
Я попытался выполнить следующий код для успешного чтения файла, но не получил логики для решения точной проблемы. Мой код для чтения файла:
var fs = require("fs");
console.log("Going to read file!");
fs.readFile('emp.txt', function(err, data){
if(err){
return console.error(err);
}
console.log(data.toString().split(":"));
console.log("read Successfully");
})
Какова правильная логика для чтения Salary
поля emp.txt
и вычисления его суммы?
Ответ №1:
Сначала вам нужно разделить новые строки ( n
) в вашем текстовом файле. Затем выполните цикл по каждой строке и получите общее:
var fs = require("fs");
console.log("Going to read file!");
let totalSalary = 0;
fs.readFile('emp.txt', function(err, data){
if(err){
return console.error(err);
}
const dataRows = data.toString().split("n");
for (let index=0; index < dataRows.length; index ){
if (index > 0){
let empData = dataRows[index].split(":");
totalSalary = parseInt(empData[3]);
}
}
console.log(totalSalary);
console.log("read Successfully");
})
Repl.it Ссылка : https://repl.it/@h4shonline/ImpressionableRadiantLogic
Комментарии:
1. ! О, хорошо, понял! Сработало очень хорошо для меня, спасибо за помощь!
Ответ №2:
Почему вы не:
- прочитайте файл построчно. https://nodejs.org/api/readline.html#readline_example_read_file_stream_line_by_line
- удалите пробелы
- разделите строку на «:»
- получить последний элемент
- Преобразовать в Number()
- Проверьте, является ли его число
- добавить в сумму
Что-то вроде этого:
const fs = require('fs');
const readline = require('readline');
async function processLineByLine() {
const fileStream = fs.createReadStream('emp.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
// Note: we use the crlfDelay option to recognize all instances of CR LF
// ('rn') in input.txt as a single line break.
let sum = 0;
for await (let line of rl) {
// Each line in input.txt will be successively available here as `line`.
line = line.replace(/ /g,'').split(':');
const salary = Number(line.pop());
if (!isNaN(salary)) {
sum = salary;
}
}
console.log(`Sum: ${sum}`)
}
processLineByLine();
Комментарии:
1. ! Этот ответ тоже сработал очень хорошо. Но, я думаю, вы использовали немного сложную логику. Спасибо вам за помощь!