Создайте приложение на Node.js, которое принимает путь к текстовому файлу в качестве аргумента командной строки, подсчитывает количество строк, слов и символов в файле, а затем сохраняет результат в
stats.json
. Программа также должна уметь выводить статистику в консоль.Программа должна уметь выводить статистику по папке в консоль и сохранять её в файл.
•
node app.js report /path/to/file.txt
— создает файл stats.json с количеством строк, слов и символов в файле.•
node app.js print /path/to/file.txt
— выводит статистику по файлу в консоль.Решение задачи
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readFile = promisify(fs.readFile);
const action = process.argv[2];
const filePath = process.argv[3];
const reportFile = 'stats.json';
if (!action || !filePath) {
console.log('Используйте: node app.js <report|print> <путь к файлу>');
process.exit(1);
}
async function analyzeFile(file) {
const content = await readFile(file, 'utf8');
const lines = content.split('\n').length;
const words = content.split(/\s+/).filter(Boolean).length;
const chars = content.length;
return { lines, words, chars };
}
async function generateReport(file) {
const stats = await analyzeFile(file);
fs.writeFile(reportFile, JSON.stringify(stats, null, 2), (err) => {
if (err) {
console.error('Ошибка при записи отчета:', err);
process.exit(1);
}
console.log(`Отчет сохранен в ${reportFile}`);
});
}
async function printReport(file) {
const stats = await analyzeFile(file);
console.log(`Файл: ${file}`);
console.log(`Количество строк: ${stats.lines}`);
console.log(`Количество слов: ${stats.words}`);
console.log(`Количество символов: ${stats.chars}`);
}
if (action === 'report') {
generateReport(filePath);
} else if (action === 'print') {
printReport(filePath);
} else {
console.log('Неизвестное действие. Используйте "report" или "print".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1🤗1
• SMS-автоответчик с обновлением статуса: еще один канал связи для клиентов, которым мало интернета и звонков
• Попробуйте Tauri
• Новый оператор безопасного присваивания в JavaScript: ?=
• Как ускорить компонентную frontend-разработку с помощью продуктового подхода: опыт Рунити
• PostgreSQL Antipatterns: валим «слона» — highload на ровном месте
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы знаете в чём разница между exports и module.exports в Node.js? Для начала рассмотрим, что представляет собой объект модуля.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Якорные ссылки — простой способ создать навигацию по странице. Например, в оглавлении можно использовать якорные ссылки для перехода к различным разделам страницы.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎2
Когда я консультирую клиентов по работе с API, то рекомендую никогда не обращаться к API напрямую.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👎2❤1👍1
Узнайте, как реализовать автозагрузку PSR-4 в PHP. Откройте для себя преимущества PSR-4, как настроить его с помощью Composer, а также лучшие практики организации пространств имён в ваших PHP проектах.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4👎2❤1
Модуль
vm
в Node.js позволяет создавать изолированные контексты выполнения JavaScript-кода. Это полезно, когда нужно безопасно выполнить сторонний код, обеспечив его выполнение в песочнице, без доступа к основному приложению.const vm = require('vm');
// Код, который мы хотим выполнить в изолированном контексте
const code = 'let x = 10; x += 5; x';
// Создаем новый контекст
const context = {};
// Выполняем код в новом контексте
vm.createContext(context);
const result = vm.runInContext(code, context);
console.log('Результат выполнения:', result); // 15
console.log('Контекст после выполнения:', context); // { x: 15 }
🗣️ Использование vm полезно для выполнения незнакомого или потенциально опасного кода, так как оно изолирует выполнение кода от остальной части приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3❤1
В статье разберемся, что такое stackless и stackful корутины, их основные отличия, плюсы и минусы. Я объясню это простым языком, чтобы даже сложные концепции многопоточности были легко понятны.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
В статье рассматривается, как с помощью ChatGPT можно автоматизировать генерацию однотипного кода для телеграм-ботов, ускорить процесс разработки и избавиться от рутинных задач при работе с шаблонами.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Если ты хочешь стать настоящим мастером API, тебе нужно знать о паттерне BFF. В этой статье рассказываем, как создавать управляемую архитектуру с использованием BFF, избегая избыточной сложности и головной боли при поддержке.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Что будет выведено в консоль при выполнении следующего кода?
const fs = require('fs');
fs.readFile('nonexistent.txt', 'utf8', (err, data) => {
if (err) {
console.log('Error:', err.code);
} else {
console.log('File content:', data);
}
});
console.log('Done');
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
32%
Error: ENOENT
14%
Error: undefined
10%
File content: undefined
45%
Done будет выведено после ошибки
👎7👍4
В статье объясняется, как деструктуризация массивов может замедлить JavaScript код. Рассматриваются различия в байткоде и проводится тест, показывающий, почему ArrayAssignmentPattern не всегда оптимален.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4👏1
В данной статье рассмотрим такой javascript модуль как HMPL и как он может заменить HTMX в проекте. Также, рассмотрим в чём их отличия, преимущества и недостатки.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯2❤1
Создайте приложение на Node.js, которое принимает URL в качестве аргумента командной строки, загружает HTML-контент по указанному URL, подсчитывает количество тегов на странице и сохраняет результат в tags.json.
•
node app.js report https://example.com
— сохраняет количество тегов HTML-страницы в файл tags.json.•
node app.js print https://example.com
— выводит статистику по тегам на странице в консоль.Решение задачи
const https = require('https');
const fs = require('fs');
const { JSDOM } = require('jsdom');
const action = process.argv[2];
const url = process.argv[3];
function fetchHtml(url) {
return new Promise((resolve, reject) => {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => (data += chunk));
res.on('end', () => resolve(data));
}).on('error', (err) => reject(err));
});
}
async function report(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});
fs.writeFileSync('tags.json', JSON.stringify(tagCount, null, 2));
console.log('Статистика сохранена в tags.json');
} catch (err) {
console.error('Ошибка:', err);
}
}
async function print(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});
console.log('Статистика по тегам:', tagCount);
} catch (err) {
console.error('Ошибка:', err);
}
}
if (action === 'report') {
report(url);
} else if (action === 'print') {
print(url);
} else {
console.log('Используйте команды: report <URL> или print <URL>');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2👌1
В статье рассказывается о создании системы для поиска недооценённых акций на российском рынке, используя данные аналитиков. Рассматривается, как собирать прогнозы для 89 акций с Московской биржи и анализировать их точность.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
В статье рассказывается о крупной фронтенд-команде, которая работает с микросервисами и общей дизайн-системой. Несмотря на стандарты, возникали проблемы, и статья подробно раскрывает, как они были решены.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В статье рассматривается "React Selfie AI Background Remover" — компонент, использующий TensorFlow.js для удаления фона в браузере. Основные фишки: точная сегментация с MediaPipe, легкая интеграция в React и live demo.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
В статье рассказывается о реализации ботов для игры "длинные нарды". Автор описывает, как строится архитектура сервера и модули, а также делится особенностями создания ИИ-игроков, которые управляются программой.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
В Node.js события обрабатываются с помощью объекта
EventEmitter
. Этот объект позволяет объявлять события и реагировать на них с помощью подписок. Когда событие происходит, вызываются все функции, подписанные на него. Это важный механизм для асинхронной архитектуры.const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('event', () => {
console.log('Событие произошло!');
});
emitter.emit('event'); // "Событие произошло!"
🗣️ EventEmitter широко используется в Node.js для асинхронной обработки и реакции на различные события в системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1