поиск в тексте фрагментов (по заданному шаблону)
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



поиск в тексте фрагментов (по заданному... Expand / Collapse
Автор
Сообщение
15.07.2001 0:22


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.01.2008 15:09
Сообщ.: 329, Visits: 3 604
поиск в тексте фрагментов (по заданному шаблону)
и запись их в таблицу хотя бы алгоритм за задницу ухватить


Сообщ. #716303
25.07.2001 0:17
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 29.12.2006 18:09
Сообщ.: 17, Visits: 178
А по какому шаблону? Типа "AB??E" должен находить строки "ABCDE", "ABXYE" и т.д.? Если так, то надо читать текст например для данного примера по 5 символов начиная с первого и заканчивая (количество_символов_в_тексте-5)-м символом, заменять в прочитанном фрагменте символы с номерами 2 и 3 на вопросительный знак и сравнивать с "AB??E". Если я правильно понял, могу выслать кусок программы. Я в этом форуме ежедневно.
Сообщ. #717391
25.07.2001 1:55


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.01.2008 15:09
Сообщ.: 329, Visits: 3 604
Спасибо за ответ но контора которой было нужно это решение оказалась слегка быковатой. У меня возникла примерно такая же идея только там
посложнее будет. Представляешь им было в лом прочитать текст программы которую я им послал.
Ругаются что текст кода нечитаемый я так и не понял что им надо было.Наверное чтобы как в букваре.
Лучше поделись опытом как найти работу программисту? Если хошь пиши
nikolaimay@mail.ru
p.s.Я как-бы новичок в этом деле но страсть какой догадливый!!!


Сообщ. #717393
25.07.2001 12:50
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 11.12.2002 20:43
Сообщ.: 51, Visits: 562
Задача поиска по шаблону решается обычно с помощью регулярных выражений.
Для построения парсера существует множество методов (и толстенные учебники, типа Ахо и Ульмана). Проще всего написать рекурсивный алгоритм. Думаю, в интенете должна быть куча примеров.
Сообщ. #717447
26.07.2001 1:02


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.01.2008 15:09
Сообщ.: 329, Visits: 3 604
Спасибо за ответ!Как тут применить рекурсивный алгоритм? А у меня была другая идея. Вот тут у меня возникли проблемы. Сказали что
текст невозможно прочитать:
Данная программа передаёт в конечный файл любую лексемму, которая следует за взятым из шаблона словом
Как и требовалось это тоже набросок программы, и он нуждается в проработке. Помимо явных
ошибок в ней можно доработать некоторые детали.Например избавиться от глобальных переменных,и т.д.
Но в целом идея программы хорошо подходит под решение задач подобных этой.

Вот набросок программы:

#include <stdio.h> //подключение стандартных библиотек
#include <string.h>
int tmp1,tmp2,tmp3;
void montag_lexemmi() //Функция монтажа лексеммы из части шаблона
{
int i=1;
while(ispunct(str2[i])!=1) //пока в строке нет знака пунктуации("№;%:?*(){}[] и т.д.)
{
i++;
ch=str2[i]; //пишет символы в строку-лексемму
lexemma=lexemma+ch;
}
tmp3=strlen(shablon);
}
void main() //тело программы
{
FILE *opn,*cls; //Объявление указателя на файл (специальный тип данных)
string str1=""; //Временный буфер-строка для хранения очередной считываемой строки из иссл.файла
str2=""; //Буфер-строка для хранения шаблона
str_x=""; //Временный буфер-строка для хранения очередной строки-результата
lexemma=""; //Временный буфер-строка для хранения выделенной из шаблона лексеммы(например "Имя")
maska=""; //Строка-маска для проверки совпадения лексемм
char ch[10]; //Временный буфер-символьный массив для хранения лексеммы,подходящей по условию
opn=fopen("Исследуемый файл","Режим чтения"); //открытие файла
cls=fopen("Файл-таблица","Режим записи"); //открытие файла-базы данных
fputs("Имя.Фамилия.Отчество.",Файл-таблица) //запись в файл-базу данных первой строки(как задано в условии)
if(opn!=NULL) puts("Ошибка открытия файла"); //сообщение об ошибке если файл пустой
fgets(str1,opn); //копирование во временный буфер-строку первой строки иссл.файла
strcpy(str2,"шаблон"); //Копирование набора символов-заданного пользователем
//шаблона в строку для работы с ним
tmp2=strlen(str2); //Вычисление длины строки-шаблона
tmp1=strlen(str1); //Вычисление длины строки, взятой из файла для работы с ней
do //начало цикла исследования
{
montag_lexemmi(); //применение функции монтажа лексеммы (с чем сравнивать)
for(j=1;1<tmp1;j++) //цикл движения по строке
{
for(i=1;i<tmp3;i++) //Формирование строки-маски из элементов исследуемой строки
{ //размером в tmp3 символов
ch=str2[i]; //присваивание i-того элемента строки временной переменной
maska=maska+ch; //...и так далее
}
if(maska==lexemma) //Самое интересное: если маска совпадает с лексеммой
i=tmp3;
while(ispunct(str1[i])!=1) //пока в строке нет знака пунктуации("№;%:?*(){}[] и т.д.)
{
i++; //счётчик цикла
ch=str2[i]; //запись i-того элемента строки следующего за лексеммой, взятой из шаблона
str_x=str_x+ch; //...и так далее
}
}
puts(str_x,Файл-таблица); //запись полученной строки в файл-базу данных
fgets(str1,opn); //считывание следующей строки из файла
}
while(!feof(opn)) //Пока не закончится файл
}


Сообщ. #717553
26.07.2001 1:03


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.01.2008 15:09
Сообщ.: 329, Visits: 3 604
В чём моя ошибка??

Сообщ. #717554
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:08