upload files into repos

This commit is contained in:
Nikiroy78 2023-03-13 00:11:58 +03:00
parent ac021b79c0
commit 3e686970a0
7 changed files with 208 additions and 1 deletions

2
6.nodejs_js/html/a.html Normal file
View File

@ -0,0 +1,2 @@
<p>asd</p>
<p>asd</p>

1
6.nodejs_js/html/asd.htm Normal file
View File

@ -0,0 +1 @@
<p pa> 89898 </p>

49
6.nodejs_js/index.js Normal file
View 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
View 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
View File

@ -0,0 +1,7 @@
{
"dependencies": {
"fs": "^0.0.1-security",
"os": "^0.1.2",
"path": "^0.12.7"
}
}

View File

@ -1,9 +1,61 @@
# Блок заданий "Задание, Java Script, Node JS:" (6) # Блок заданий "Задание, Java Script, Node JS:" (6)
6. Установите node.js (https://nodejs.org/en/, версия LTS например, хотя не важно). 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); 1) получать список всех файлов '*.html' и '*.htm' в некоторой папке (путь к папке можно захардкодить в константу в шапке модуля) (см. fs.readdir / fs.readdirSync);
2) читать каждый файл полученный в п.1 (см. fs.readFile / fs.readFileSync); 2) читать каждый файл полученный в п.1 (см. fs.readFile / fs.readFileSync);
3) разбирать прочитанный файл, получать информацию о количестве параграфов (тегов <P ...>...</P>) содержащих некоторую подстроку (строку можно захардкодить в константу в шапке модуля); 3) разбирать прочитанный файл, получать информацию о количестве параграфов (тегов <P ...>...</P>) содержащих некоторую подстроку (строку можно захардкодить в константу в шапке модуля);
4) выводить статистику собранную в п.3 в консоль (console.log(...)) с указанием имени файла в котором собрана эта статистика. 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
View File

@ -0,0 +1,3 @@
# Тестовое задание на должность "Стажёр-программист"
Поскольку документ с тестовым заданием разбит на два блока: PHP и NodeJS/JavaScript, все папки были названы соответствующим образом и пронумерованы в соответствии с номерами заданий в блоках.
Например папка 1.php это задание 1 в блоке PHP, папка 3.nodejs_js это задание 3 в блоке NodeJS/JavaScript и т.д. Все объяснения выполнения задания были даны в readme.md каждой папки.