Ещё раз привет!
1.)Вот такой вопрос, мне нужно найти в файле слово, и если слово есть, то вывести всю строку.Я пишу программу словарь, по-этому такой вопрос.То есть к примеру я ввёл слово hello, а в файле строка вида: hello привет
Вопрос: как мне вывести всю строку? Т.е hello привет
2.)И как реализовать следующий момент, пользователь хочет удалить слово из словаря, программа запрашивает это слово у пользователя, открывается файл, находится слово.
Вопрос: как удалить всю строку? То есть пользователь ввёл hello, программа должна удалить из файла строку hello привет.
Спасибо!
Решено: Поиск слова и вывод строки (чистый Си)
Модератор: Модераторы разделов
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Решено: Поиск слова и вывод строки
Вопрос из сорта вопросов про сферического коня. Как-как... 1. Читать файл построчно и искать подстроку с помощью strstr. 2. например, выяснить номер нужной строки в файле (как в п. 1), потом записать все строки (кроме ненужной) в другой, временный, файл. После чего поместить его на место старого.
Спасибо сказали:
-
- Сообщения: 27
Re: Решено: Поиск слова и вывод строки
1.Как подстроку найти это ясно, а как вывести всю строку с найденной подстрокой?
2.Как узнать номер строки?
оО
2.Как узнать номер строки?
оО
-
- Сообщения: 362
- Статус: Ad Astra per aspera
- ОС: openSUSE 11.4, Arch
Re: Решено: Поиск слова и вывод строки
Вы читаете файл построчно. То есть у Вас уже есть отдельная строка. strstr() вы прогоняете по ней, а не по всему файлу. Если подстрока там есть, значит вывести всю строку.
Вы читаете файл построчно. Заводите переменную счетчик, при прочтении следующей строки, увеличиваете этот счетчик.
No problems - just solutions!
Спасибо сказали:
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Решено: Поиск слова и вывод строки
В этом случае, батенька, вам тупой поиск никак не поможет: либо используйте какой-нибудь sqlite для хранения списка слов, либо организуйте свою собственную БД. Но без индексирования вы получите жуткие тормоза. Разве только если у вас будет один-единственный словарь с ~10000 слов - тогда торможения почти не будет заметно. Особенно если его сразу в оперативку загнать (или хотя бы mmap сделать).
Кстати, могу поделиться башевским cgi, который ищет введенное слово по двум словарям.
Код: Выделить всё
#!/bin/sh
addw()
{
echo "<form action="/cgi-bin/addaword" method=POST>\
The translation of <b><input size=20 name="word" value="\"$word\""></b> is <input name="trans" size=50>"
echo "<input type=submit value=\"Add the word\"></form>"
}
ud="../Dictionary/userdict.txt"
eval `./convert`
echo -e "Content-type: text/html\n"
cat "char.txt"
echo "<title>My English-russian Computer Dictionary</title>"
echo "<body>"
if [ "$word" = "" ]; then
tr="Please, enter a word"
else
tr=`cat $ud|grep -i " $word "`
tr1=`cat ../Dictionary/Dictionary.txt|grep -i "^$word:"`
tr2=`cat ../Dictionary/Dictionary.txt|grep -i "$word"`
tr3=`cat ../Dictionary/kara4.dic| grep -i "$word"`
fi
if [ "$pass" = "passwd" ]; then
tmp="/tmp/dic.cgi.$$"
cat $ud | grep -v " $word " > $tmp
rm $ud
cp $tmp $ud
rm $tmp
addw
exit
fi
if [ "$tr" != "" -o "$tr1" != "" -o "$tr2" != "" -o "$tr3" != "" ]; then
if [ "$tr1" = "" ]; then
if [ "$tr2" = "" ]; then
tr1="The word is absent"
else
tr1="$tr2"
fi
fi
if [ "$tr" = "" ]; then tr="The word is absent"; fi
echo "<H5 align=center color="blue">Main dictionary:</H5><pre>"
echo "$tr1" | sed -e "s/ \+/ /g" -e "s/$word/<font color=red>$word<\/font>/g"
echo "</pre><H5 align=center color="green">User's dictionary:</H5><pre>"
echo "$tr" | sed -e "s/ \+/ /g" -e "s/$word/<font color=red>$word<\/font>/g"
echo "</pre><H5 align=center color="cyan">Карачаевский:</H5><pre>"
echo "$tr3" | sed -e "s/ \+/ /g" -e "s/$word/<font color=red>$word<\/font>/g"
echo "</pre>"
else
echo "I don't know this word, but you can add it to my database"
addw
fi
echo "</body>"
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

Спасибо сказали:
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Решено: Поиск слова и вывод строки
Словарь вообще лучше делать на основе (если не БД) двоичных деревьев поиска, лучше сразу смотреть красно-чёрные деревья, или хэш-таблиц (наверное лучший вариант по скорости выборки в случае большого числа слов и хорошей хэш-функии).
Спасибо сказали:
-
- Сообщения: 27
Re: Решено: Поиск слова и вывод строки
Ребята всем спасибо!))))Мне простеньких совсе нужен словарь, БД в виде текстового файла))))) Почти закончил писать осталась 1 функция))) Как допишу сделаю тут пост, надеюсь вы мне укажете на мои ошибки)))))И поможете сделать словарик лучше))))Спасибо ещё раз!