Проверьте пользовательский ввод против слов в текстовом файле - PullRequest
2 голосов
/ 26 января 2012

Я работаю над опцией для моей программы, и она должна работать так:

  1. заголовок пользовательского ввода
  2. Автор пользовательского ввода
  3. Затем система проверяет заголовок пользователя и автора в текстовом файле BookDB.txt
  4. если в текстовом файле уже есть запись, система выдаст сообщение об ошибке
  5. иначе он продолжит вводить цену, доступное количество и проданное количество.
  6. Книга будет добавлена ​​

Я пытался поиграть с grep, но безрезультатно. Ниже приведены мои коды для этой конкретной функции.

function fnAddBook()
{
echo "Title: "
read inputTitle
echo "Author: "
read inputAuthor

if grep -Fq "$inputTitle" BookDB.txt; then
     if grep -Fq "$inputAuthor" BookDB.txt; then
     echo "Error!"
  fi
else
  echo "Price: "
  read inputPrice
  echo "$inputTitle:$inputAuthor:$inputPrice" >> BookDB.txt
  echo "New Book successfully added!"
fi
}

содержимое BookDB.txt формат содержания | Название: Автор: Цена: QtyAvail: QtySold

Hello World:Andre:10.50:10:5
Three Little Pig:Andrew Lim:89.10:290:189
All About Ubuntu:Ubuntu Team:76.00:55:133
Catch Me If You Can:Mary Ann:23.60:6:2
Happy Day:Mary Ann:12.99:197:101

ОБНОВЛЕННАЯ ПРОБЛЕМА: В этом случае, даже если я набрал «Поймай меня, если сможешь» в качестве заголовка + «Команда Ubuntu» в качестве автора, это вызовет ошибку. Как я могу изменить коды так, чтобы они проверяли строку за строкой?

Заранее спасибо тем, кто помог! :)

1 Ответ

4 голосов
/ 26 января 2012

Есть 3 проблемы с вашим кодом.

Во-первых, опция x для grep заставляет его совпадать только с полными строками, а поскольку вы помещаете автора и заголовок в одну строку, это не будет совпадать.

При использовании опции x «Gaiman» не соответствует «Gaiman: Nation: $ 20», если вы удалите x из опций grep, это будет работать.

Вторая проблема заключается в том, что эти две команды не зависят друг от друга. Таким образом, если у вас есть книга под названием «Нация» и книга «Гайман», она будет считаться совпадением, даже если у вас есть книга «Нация» «Богатство народов», а у вас есть книга Гайман ». Anansi Boys '.

Третья проблема заключается в том, что grep найдет частичные совпадения. Если вы попытаетесь ввести книгу «Это», то grep сделает вывод, что она уже есть в базе данных, потому что «Она пришла из пустыни».

Вам нужно значение часового, чтобы определить заголовки, чтобы это исправить. (Страж должен быть неким персонажем, который не может существовать в названиях книг или имен авторов)

function fnAddBook()
{
echo "Title: "
read inputTitle
echo "Author: "
read inputAuthor
if grep -Fq "$inputTitle:inputAuthor:" BookDB.txt
then
    echo "Error!"
else
   echo "Price: "
   read inputPrice
   echo "$inputTitle:$inputAuthor:$inputPrice" >> BookDB.txt
   echo "New Book successfully added!"
fi
}

Предполагается, что ':' не может встречаться в именах авторов или именах книг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...