diff --git a/6.nodejs_js/html/a.html b/6.nodejs_js/html/a.html new file mode 100644 index 0000000..51aba75 --- /dev/null +++ b/6.nodejs_js/html/a.html @@ -0,0 +1,2 @@ +

asd

+

asd

\ No newline at end of file diff --git a/6.nodejs_js/html/asd.htm b/6.nodejs_js/html/asd.htm new file mode 100644 index 0000000..33c2bc2 --- /dev/null +++ b/6.nodejs_js/html/asd.htm @@ -0,0 +1 @@ +

89898

\ No newline at end of file diff --git a/6.nodejs_js/index.js b/6.nodejs_js/index.js new file mode 100644 index 0000000..bd8c2e3 --- /dev/null +++ b/6.nodejs_js/index.js @@ -0,0 +1,49 @@ +const path = require("path"); +const fs = require("fs"); +const PATH_TO_HTML_DIR = path.join(__dirname, "html"); // Путь до папки с .html/.htm файлами + +function getHtmlFilesList () { // Получаем список .html .htm файлов + return fs.readdirSync(PATH_TO_HTML_DIR).filter(file => { + let fileExtension = file.split('.')[file.length - 1]; + + return ['html', 'htm'].indexOf(fileExtension) == -1; // Проверяем, чтобы расширение файла находилось в списке (['html', 'htm']) + }).map(file => path.join(PATH_TO_HTML_DIR, file)); +} + +function getCountParagraphs (htmlCode) { // Посчитать количество тэгов

+ /* + Ps: в виду того, что задание не предалагает конкретный парсинг HTML, модгут возникнуть ошибки в местах содержащих примерно следующее: + */ + return htmlCode.split(' { + let data = fs.readFileSync(file, {encoding:'utf8'}); + return { + file : file, + countParagraphs : getCountParagraphs(data) + }; + }); + + return "Статистика:\n=============================\n" + countsParagraph.map(i => `Файл: ${i.file}\nКоличество

: ${i.countParagraphs}`).join('\n') + `\n=============================\nВсего: ${sum(countsParagraph.map(i => i.countParagraphs))}`; +} + +console.log(getParagraphStats()); \ No newline at end of file diff --git a/6.nodejs_js/package-lock.json b/6.nodejs_js/package-lock.json new file mode 100644 index 0000000..7339603 --- /dev/null +++ b/6.nodejs_js/package-lock.json @@ -0,0 +1,93 @@ +{ + "name": "6.nodejs_js", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "fs": "^0.0.1-security", + "os": "^0.1.2", + "path": "^0.12.7" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + } + }, + "dependencies": { + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + } + } +} diff --git a/6.nodejs_js/package.json b/6.nodejs_js/package.json new file mode 100644 index 0000000..aa8565b --- /dev/null +++ b/6.nodejs_js/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "fs": "^0.0.1-security", + "os": "^0.1.2", + "path": "^0.12.7" + } +} diff --git a/6.nodejs_js/readme.md b/6.nodejs_js/readme.md index 95e8d38..969ecc0 100644 --- a/6.nodejs_js/readme.md +++ b/6.nodejs_js/readme.md @@ -1,9 +1,61 @@ # Блок заданий "Задание, Java Script, Node JS:" (6) 6. Установите node.js (https://nodejs.org/en/, версия LTS например, хотя не важно). -Используйте документацию (https://nodejs.org/dist/latest-v16.x/docs/api/, точнее описание использования модуля "fs" https://nodejs.org/dist/latest-v16.x/docs/api/fs.html) для создания модуля (файла "*.js") который будет выполнять следующие действия: +Используйте документацию (https://nodejs.org/dist/latest-v16.x/docs/api/, точнее описание использования модуля "fs" https://nodejs.org/dist/latest-v16.x/docs/api/fs.html) для создания модуля (файла "\*.js") который будет выполнять следующие действия: ``` 1) получать список всех файлов '*.html' и '*.htm' в некоторой папке (путь к папке можно захардкодить в константу в шапке модуля) (см. fs.readdir / fs.readdirSync); 2) читать каждый файл полученный в п.1 (см. fs.readFile / fs.readFileSync); 3) разбирать прочитанный файл, получать информацию о количестве параграфов (тегов

...

) содержащих некоторую подстроку (строку можно захардкодить в константу в шапке модуля); 4) выводить статистику собранную в п.3 в консоль (console.log(...)) с указанием имени файла в котором собрана эта статистика. +``` +## Реализованный код +```javascript +const path = require("path"); +const fs = require("fs"); +const PATH_TO_HTML_DIR = path.join(__dirname, "html"); // Путь до папки с .html/.htm файлами + +function getHtmlFilesList () { // Получаем список .html .htm файлов + return fs.readdirSync(PATH_TO_HTML_DIR).filter(file => { + let fileExtension = file.split('.')[file.length - 1]; + + return ['html', 'htm'].indexOf(fileExtension) == -1; // Проверяем, чтобы расширение файла находилось в списке (['html', 'htm']) + }).map(file => path.join(PATH_TO_HTML_DIR, file)); +} + +function getCountParagraphs (htmlCode) { // Посчитать количество тэгов

+ /* + Ps: в виду того, что задание не предалагает конкретный парсинг HTML, модгут возникнуть ошибки в местах содержащих примерно следующее: + */ + return htmlCode.split(' { + let data = fs.readFileSync(file, {encoding:'utf8'}); + return { + file : file, + countParagraphs : getCountParagraphs(data) + }; + }); + + return "Статистика:\n=============================\n" + countsParagraph.map(i => `Файл: ${i.file}\nКоличество

: ${i.countParagraphs}`).join('\n') + `\n=============================\nВсего: ${sum(countsParagraph.map(i => i.countParagraphs))}`; +} + +console.log(getParagraphStats()); ``` \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..2e95d3b --- /dev/null +++ b/readme.md @@ -0,0 +1,3 @@ +# Тестовое задание на должность "Стажёр-программист" +Поскольку документ с тестовым заданием разбит на два блока: PHP и NodeJS/JavaScript, все папки были названы соответствующим образом и пронумерованы в соответствии с номерами заданий в блоках. +Например папка 1.php это задание 1 в блоке PHP, папка 3.nodejs_js это задание 3 в блоке NodeJS/JavaScript и т.д. Все объяснения выполнения задания были даны в readme.md каждой папки. \ No newline at end of file