|
|
|
Supreme Being
      
участник
Last Login: 23.01.2008 15:09
Сообщ.: 329,
Visits: 3 604
|
|
поиск в тексте фрагментов (по заданному шаблону) и запись их в таблицу хотя бы алгоритм за задницу ухватить
|
|
|
|
|
Junior Member
      
участник
Last Login: 29.12.2006 18:09
Сообщ.: 17,
Visits: 178
|
|
| А по какому шаблону? Типа "AB??E" должен находить строки "ABCDE", "ABXYE" и т.д.? Если так, то надо читать текст например для данного примера по 5 символов начиная с первого и заканчивая (количество_символов_в_тексте-5)-м символом, заменять в прочитанном фрагменте символы с номерами 2 и 3 на вопросительный знак и сравнивать с "AB??E". Если я правильно понял, могу выслать кусок программы. Я в этом форуме ежедневно.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.01.2008 15:09
Сообщ.: 329,
Visits: 3 604
|
|
Спасибо за ответ но контора которой было нужно это решение оказалась слегка быковатой. У меня возникла примерно такая же идея только там посложнее будет. Представляешь им было в лом прочитать текст программы которую я им послал. Ругаются что текст кода нечитаемый я так и не понял что им надо было.Наверное чтобы как в букваре. Лучше поделись опытом как найти работу программисту? Если хошь пиши nikolaimay@mail.ru p.s.Я как-бы новичок в этом деле но страсть какой догадливый!!!
|
|
|
|
|
Forum Guru
      
участник
Last Login: 11.12.2002 20:43
Сообщ.: 51,
Visits: 562
|
|
Задача поиска по шаблону решается обычно с помощью регулярных выражений. Для построения парсера существует множество методов (и толстенные учебники, типа Ахо и Ульмана). Проще всего написать рекурсивный алгоритм. Думаю, в интенете должна быть куча примеров.
|
|
|
|
|
Supreme 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)) //Пока не закончится файл }
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.01.2008 15:09
Сообщ.: 329,
Visits: 3 604
|
|
|
|
|