12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
||||||
1 | ||||||
Разбор строки по шаблону17.10.2017, 19:51. Показов 4894. Ответов 36
Метки нет (Все метки)
Может у кого то есть, поэтому сначала задам вопрос:
Требуется написать функцию которая проверяет есть ли вхождение шаблона (вид шаблона: %a[1]%a[2]%a[3]%a[4]%a[5]% % - подстрока любой длины и состоящая из любых символов)) в строку S. Если результат True, то вернуть массив состоящий из подстрок. Пример:
a[1]='Строка состоящая' a[2]='из' a[3]='нескольких' a[4]='_и цифр' Может у кого то подобное уже реализовано, и не жалко поделится. При этом в идеале еще и чтобы на регист букв внимание не обращала. Ну к примеру еще 1 параметр передавать F(регист не важен) или T(регист важен). Function Razbor(S,Pattern:String;Flag:boolean;A:array of string):boolean; Вот что то типа такого.
0
|
17.10.2017, 19:51 | |
Ответы с готовыми решениями:
36
Cинтаксический анализ (разбор) арифметического выражения (a-b)^2 по заданному шаблону Книга "Конечный автомат 2: Возвращение". Часть 1. Разбор. Глава 8. Имя, проверка строки и разбор до. На том ли я пути? Проверка строки по шаблону Замена текста по шаблону и удаление внешних тегов, относящихся к найденному шаблону |
Native x86
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,423
|
||||||
17.10.2017, 20:14 | 3 | |||||
Сообщение было отмечено Setix как решение
Решение
Почему бы не использовать регулярные выражения?
1
|
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|
18.10.2017, 17:54 | 5 |
Setix,
Регулярка в помощь! Вписывай в переменную регулярки свой шаблон и дело сделано! Пример выше дан.
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
|
19.10.2017, 12:35 [ТС] | 6 |
Об этом классе не слышал до этого. Хотелось бы не привлекать сторонний класс.
В качестве разделителя используется - символ % суть в том что есть строка S, надо выделить подстроки между разделителями и поместить их в строковый массив. - парсер просто пишу. Функция будет просто находить 1 вхождение шаблона и помещать подстроки в массив, который в свою очередь потом в последствии и использоваться.
0
|
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
|
|
19.10.2017, 13:06 | 7 |
SplitString() в помощь.
0
|
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
|
|
19.10.2017, 13:08 | 9 |
0
|
qwertehok
|
19.10.2017, 13:10
#10
|
Не по теме: а где написано что обязательно?
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
|
19.10.2017, 13:10 [ТС] | 11 |
0
|
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
|
||||||
19.10.2017, 13:15 | 12 | |||||
Setix, пример к моему п. #7:
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
|||||||||||
19.10.2017, 14:08 [ТС] | 13 | ||||||||||
В общем сам запутался с вами написал бред )))).
Задание: Написать функцию, которая будет разбивать строку - на массив строк в зависимости от шаблона. В качестве разделителя может использоваться любой символ(набор символов) который находится между знаками %. В свою очередь кол-во элементов массива будет равно кол-ву знаков %.
В принципе уже привели пример использования класса TPerlRegEx. посмотрел как работает в принципе устраивает, но он последний шаблон выводит. Т.е
Пример не много подправил чтобы показать что мне надо и что выводит. На выходе получаем: RegEx.Groups[1]=Строка состоящая из нескольких_ RegEx.Groups[2]=_слов А надо RegEx.Groups[1]=Строка состоящая из RegEx.Groups[2]=_нескольких_слов Т.е. он ищет с конца вхождение строки, мне бы надо сначала. Но все таки хотелось бы без использования класса что то увидеть. Метод посмотрел к сожалению не подходит. В этом методе в виде шаблона может использоваться 1 символ, если использовать в виде шаблона(массив символов), то каждый из них становится разделителем.
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
|
19.10.2017, 14:25 [ТС] | 15 |
На входе:
1. строка с данными. 2. шаблон. 3. имя массива куда складывать результат. На выходе: 1. массив (кол-во элементов массива равно кол-ву символов: % в шаблоне). 2. True - шаблон есть в строке. False - шаблон не найден. В качестве разделителя используется подстрока которая находится между значками %. Пример: S='gshdgfh dsfgh_djfhjhjсловоjdjkdjfk jhjj' Pattern='%_%слово%' Исходя из шаблона должен получится массив из 3 элементов так как 3 символа %. A[1]='gshdgfh dsfgh'; A[2]='djfhjhj'; A[3]='jdjkdjfk jhjj'; Добавлено через 6 минут нет разницы во что ты будешь ложить результат. В StringList или в массив строк. Суть не в элементе где будет хранится информация, а в том чтобы извлечь из строки ее...
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
|
19.10.2017, 14:50 [ТС] | 17 |
шаблон представляет собой строку вида:
%Разделитель_1%Разделитель_2%_Разделитель_3%.... . в шаблоне используется знак %, он собой заменяет информацию из основной строки, которую я хочу получить. т.е. в 1 элемент массива ложу то что находится до Разделитель_1. во 2 элемент массива ложу то что находится между Разделитель_2 и Разделитель_2. и т.д. Тем самым кол-во элементов выходного массива будет равно кол-ву знаков %.
0
|
12 / 10 / 5
Регистрация: 22.07.2015
Сообщений: 215
|
||||||
19.10.2017, 15:25 [ТС] | 19 | |||||
Flag1=true так как искомый шаблон есть в строке S. Соответственно, получаем массив A c 3 элементов: [1]='Жили-были_' [2]='_с женой, и была у них_' [3]='.' Flag1=false; Соответственно, массив A очищаем. A^=Nil;
0
|
Модератор
|
|
19.10.2017, 15:25 | 20 |
Setix, я вот смотрю-смотрю и все не понимаю: ну что Вы уперлись в этот, так сказать, "шаблон"? Почему нельзя сделать массив возможных разделителей? Тогда Ваша задача решается в 3-4 строки...
0
|
19.10.2017, 15:25 | |
19.10.2017, 15:25 | |
Помогаю со студенческими работами здесь
20
Поиск строки из переменной по шаблону SED Удаление строки по шаблону Генератор строки по заданному шаблону C# Поиск строки в файле по шаблону Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |