Здравствуйте!
Никак не могу разобраться в чем дело...
Есть строка: "2* 9560; 2* 9650; 2* 9700;", из нее нужно выделить числа до знака "*" - первое число и между "*" и ";" - второе. Делаю так: Считаю количество вхождений ";" и задаю цикл на это количество, в котором из общей строки, назовем её СТРОКА, выделяю первую часть до знака ";" это будет переменная ПОДСТРОКА, затем из подстроки выделяю ЧИСЛО1 до знака "*", а второе ЧИСЛО2 от знака "*" до ";". Далее из СТРОКА убираю слева количество символов ПОДСТРОКА и повторяю цикл. В итоге получаю, что ЧИСЛО2 со знаком ";"
Для выделения из строки использую функцию Сред(<Строка>,<№ первого символа><№ последнего символа>)
Здается мне, что третий параметр, который можно опустить, становиться равен 0 из-за этого выбирается вся строка до конца, что я делаю не так, помогите пожалуйста разобраться!Изменено 17.01.12 10:39:08
1. "9650" это первые "9560" или вторые "9560"
2. Какая ";" является границей разбора строки?
3. на стадии формирования этой строки не проще ли выдернуть то, что нужно, чем потом разбором заниматься
вот Вам пример, правда, на старой строке
&НаКлиенте
Процедура ляля(Команда)
Стр = "260; 2* 9650; 200;";
Длина = СтрДлина(Стр);
Для ккк = 1 по СтрЧислоВхождений(Стр,"*") цикл
Й = Найти(Стр,"*");
ЛеваяДлина = Длина - (Длина - й + 1);
ПраваяДлина = Длина - й;
ЛеваяЧасть = Лев(Стр,ЛеваяДлина);
ПраваяЧасть = Прав(Стр,ПраваяДлина);
КонецЦикла;
КонецПроцедуры
получаете СтрДлина(), потом обычная математика и через Сред() (я не стал дальше писать)
Мне все три группы нужны!
2 * 9560;
2 * 9650;
2 * 9700;
Для этого они и отделены знаком ";". Я пользовался функция Найти ( ПодСтрока,";" ) дает нужное число (номер) символа, но вот такой код: дает в итоге 9560; , а мне нужно только 9560 !
Может кто подскажет про Регулярную функцию? Можно ли брать текст из строки по шаблону? Как проверять строку на количество вхождений и соответствие шаблону я понял.
Хотелось бы примерчик
1. "дает в итоге 9560; , а мне нужно только 9560 !" - а кто будет убирать ещё один знак?!
дело ведь в том, что ";" имеет позицию 9, 19, 29.
Вам нужно получить все символы, которые стоят ДО 9, 19 и 29.
Вот обычной математикой Вы их и получите.
а потом, путем отсечения нужных Вам чисел, возвращайте форматную строку и снова её разбирайте
чем проще Вы сделаете для себя форматную строку, тем будет лучше.
2. "Может кто подскажет про Регулярную функцию? Можно ли брать текст из строки по шаблону" --- об'ясните, пожалуйста, подробно, что Вы хотите
3. Хотелось бы примерчик --- пример чего?
Вам нужно получить все символы, которые стоят ДО 9, 19 и 29.
Выбрать строку из строки "2 * 9560; " начиная со знака следующего после знака "*" ( Найти (ПодСтрока,"*")+1 ), и кончая знаком предшествующим знаку ";" ( Найти(ПодСтрока,";")-1 )
Собственно помощь в этом уже не требуется, сделал вот так:
"Может кто подскажет про Регулярную функцию? Можно ли брать текст из строки по шаблону" --- об'ясните, пожалуйста, подробно, что Вы хотите
Хочется собственно научиться пользоваться Регулярными выражениями, например вот для описанного мною случаяИзменено 17.01.12 12:37:25
Да и Символ ";" не обязательно будут стоять на 9, 19, 29 месте! Это просто для примера и если приглядется, то станет видно, что содержимое переменной "Строка" явно не по шаблону заведено. В реальности второе число будет колебаться от четырехзначного до пятизначного, а может и 6-ти. Для верности можно еще СокрЛП() добавить