Как можно проверить наличие определенного слова в текстовом файле с использованием модуля fs?

Какова функция в node.js для сравнения ответа пользователя через readline.question с определенным словом в файле txt?
  • 28 января 2024 г. 9:08
Ответы на вопрос 2
Для проверки наличия определенного слова в текстовом файле с использованием модуля `fs` в Node.js, вы можете прочитать содержимое файла и затем использовать метод `includes` JavaScript для поиска слова в строке. Вот пример кода, который демонстрирует, как это можно сделать:

```javascript
const fs = require('fs');
const readline = require('readline');

// Определение пути к файлу
const filePath = 'path/to/your/file.txt';

// Функция для проверки наличия слова в файле
function findWordInFile(word, callback) {
  fs.readFile(filePath, 'utf8', (err, data) => {
    if (err) {
      return callback(err);
    }
    const wordExists = data.includes(word);
    callback(null, wordExists);
  });
}

// Создание интерфейса readline
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// Задать пользователю вопрос
rl.question('Введите слово для поиска: ', (userInput) => {
  // Проверить наличие слова в файле
  findWordInFile(userInput, (err, exists) => {
    if (err) {
      console.error('Произошла ошибка при чтении файла:', err);
    } else {
      console.log(`Слово "${userInput}" ${exists ? 'найдено' : 'не найдено'} в файле.`);
    }
    // Закрыть интерфейс readline
    rl.close();
  });
});
```

В примере выше функция `findWordInFile` принимает слово и функцию обратного вызова, которая будет вызвана после завершения чтения файла. Функция `fs.readFile` асинхронно читает содержимое файла, и если чтение происходит без ошибок, то проверяется наличие слова с использованием метода `includes`. Функция обратного вызова вызывается с двумя аргументами: объектом ошибки (если она произошла) и булевым значением, указывающим на то, найдено ли слово в тексте.

После определения функции `findWordInFile` мы используем модуль `readline` для запроса у пользователя слова, которое нужно найти в файле, и выполняем поиск с помощью заданной ранее функции. В результате пользователю выводится сообщение, сообщающее, найдено ли введённое слово в файле.

Пожалуйста, обратите внимание, что для работы этого кода вам нужно будет указать правильный путь к файлу в переменной `filePath`.
Что значит сверять, давать ответ есть/нет? слово это строка с любыми символами (пробелы, знаки препинания) или набор букв на каком то языке с игнорированием регистра и вспомогательных символов (встречаются в других языках), а кодировка у файла? 

Если просто строка без учета всего иного, то читаешь файл в память fs.readFileSync(filePath, 'utf8'); где utf8 - ожидаемая кодировка файла. Наличие слова в этой строке можно простым регулярным выражением new RegExp(`\\b${targetWord}\\b`, 'gi') и методом regexp.test(строка_с_содержимым_файла). Соответственно fs подключить require('fs').

Если пользователь будет вводить что угодно, то можно ограничить его ввод дополнительным регулярным выражением, проверяя и ругаясь соответственно.
Похожие вопросы