upload files into repos
This commit is contained in:
parent
ac021b79c0
commit
3e686970a0
2
6.nodejs_js/html/a.html
Normal file
2
6.nodejs_js/html/a.html
Normal file
@ -0,0 +1,2 @@
|
||||
<p>asd</p>
|
||||
<p>asd</p>
|
1
6.nodejs_js/html/asd.htm
Normal file
1
6.nodejs_js/html/asd.htm
Normal file
@ -0,0 +1 @@
|
||||
<p pa> 89898 </p>
|
49
6.nodejs_js/index.js
Normal file
49
6.nodejs_js/index.js
Normal file
@ -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) { // Посчитать количество тэгов <p>
|
||||
/*
|
||||
Ps: в виду того, что задание не предалагает конкретный парсинг HTML, модгут возникнуть ошибки в местах содержащих примерно следующее: <tag value="..<p..">
|
||||
*/
|
||||
return htmlCode.split('<p').length - 1;
|
||||
}
|
||||
|
||||
function sum (array) { // Фукнция суммирования
|
||||
if (!Array.isArray(array)) {
|
||||
throw new Error("Argument error: required Array type");
|
||||
}
|
||||
else if (array.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
else if (array.length == 1) {
|
||||
return array[0];
|
||||
}
|
||||
let count = array[0];
|
||||
for (let i = 1; i < array.length; i++) {
|
||||
count += array[i];
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function getParagraphStats () { // "Главная" функция.
|
||||
let countsParagraph = getHtmlFilesList().map(file => {
|
||||
let data = fs.readFileSync(file, {encoding:'utf8'});
|
||||
return {
|
||||
file : file,
|
||||
countParagraphs : getCountParagraphs(data)
|
||||
};
|
||||
});
|
||||
|
||||
return "Статистика:\n=============================\n" + countsParagraph.map(i => `Файл: ${i.file}\nКоличество <p>: ${i.countParagraphs}`).join('\n') + `\n=============================\nВсего: ${sum(countsParagraph.map(i => i.countParagraphs))}`;
|
||||
}
|
||||
|
||||
console.log(getParagraphStats());
|
93
6.nodejs_js/package-lock.json
generated
Normal file
93
6.nodejs_js/package-lock.json
generated
Normal file
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
7
6.nodejs_js/package.json
Normal file
7
6.nodejs_js/package.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"fs": "^0.0.1-security",
|
||||
"os": "^0.1.2",
|
||||
"path": "^0.12.7"
|
||||
}
|
||||
}
|
@ -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) разбирать прочитанный файл, получать информацию о количестве параграфов (тегов <P ...>...</P>) содержащих некоторую подстроку (строку можно захардкодить в константу в шапке модуля);
|
||||
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) { // Посчитать количество тэгов <p>
|
||||
/*
|
||||
Ps: в виду того, что задание не предалагает конкретный парсинг HTML, модгут возникнуть ошибки в местах содержащих примерно следующее: <tag value="..<p..">
|
||||
*/
|
||||
return htmlCode.split('<p').length - 1;
|
||||
}
|
||||
|
||||
function sum (array) { // Фукнция суммирования
|
||||
if (!Array.isArray(array)) {
|
||||
throw new Error("Argument error: required Array type");
|
||||
}
|
||||
else if (array.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
else if (array.length == 1) {
|
||||
return array[0];
|
||||
}
|
||||
let count = array[0];
|
||||
for (let i = 1; i < array.length; i++) {
|
||||
count += array[i];
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function getParagraphStats () { // "Главная" функция.
|
||||
let countsParagraph = getHtmlFilesList().map(file => {
|
||||
let data = fs.readFileSync(file, {encoding:'utf8'});
|
||||
return {
|
||||
file : file,
|
||||
countParagraphs : getCountParagraphs(data)
|
||||
};
|
||||
});
|
||||
|
||||
return "Статистика:\n=============================\n" + countsParagraph.map(i => `Файл: ${i.file}\nКоличество <p>: ${i.countParagraphs}`).join('\n') + `\n=============================\nВсего: ${sum(countsParagraph.map(i => i.countParagraphs))}`;
|
||||
}
|
||||
|
||||
console.log(getParagraphStats());
|
||||
```
|
3
readme.md
Normal file
3
readme.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Тестовое задание на должность "Стажёр-программист"
|
||||
Поскольку документ с тестовым заданием разбит на два блока: PHP и NodeJS/JavaScript, все папки были названы соответствующим образом и пронумерованы в соответствии с номерами заданий в блоках.
|
||||
Например папка 1.php это задание 1 в блоке PHP, папка 3.nodejs_js это задание 3 в блоке NodeJS/JavaScript и т.д. Все объяснения выполнения задания были даны в readme.md каждой папки.
|
Loading…
Reference in New Issue
Block a user