Имя: Пароль:
1C
1С v8
Формулы в строке
0 EverGreenMouse
 
01.10.15
20:42
Итак сабж. Есть формула в типе строка. Нужно вычленить переменные. То есть имеем строку "Х1+Х2+858*Х3". Как вычленить "Х с номером"? Вариант разложитьСТрокуВМассивПодстрок замечательный, но как разложить по нескольким разделителям (арифметическим знакам)???
1 ДенисЧ
 
01.10.15
20:47
Нужно написать грамматику и по ней конечный автомат парсинга.
2 EverGreenMouse
 
01.10.15
20:52
А существует ли поиск по маске в массиве строк?
3 echo77
 
01.10.15
20:53
А что надо? Вычислить()?
4 EverGreenMouse
 
01.10.15
20:53
надо распарсить строку на переменные)
5 echo77
 
01.10.15
20:53
(2) существуют регулярные выражения
6 EverGreenMouse
 
01.10.15
20:54
Вычислить() не надо. Задача только в отделении мух от котлет
7 EverGreenMouse
 
01.10.15
20:54
(5) через Сom объект?
8 EverGreenMouse
 
01.10.15
20:55
(5) RegExp = Новый COMОбъект("VBScript.RegExp") ???
9 echo77
 
01.10.15
20:55
(6) доработать разложитьстрокувмассивподстрок?
10 EverGreenMouse
 
01.10.15
20:56
(9) Каким образом? Добавить кучу Разделителей, не нахожу пока способа это сделать
11 User_Agronom
 
01.10.15
21:10
(0) Перебор строки по символам.
Задание начального уровня программирования.
12 User_Agronom
 
01.10.15
21:13
Стр = "Х1+Х2+858*Х3";

Для каждого й = 1 по СтрДлина цикл
   Сим = Сред(Стр,й,1);
   имяпеременной = "";
  Если Найти(Сим, "*/+-)(")>0 тогда
    Сообщить(ИмяПеременной)
   ИмяПеременной = "";
  Иначе
    ИмяПеременной = Имяпеременной + Сим
КонецЕсли
КонецЦикла
13 User_Agronom
 
01.10.15
21:13
Ошибочка вышла. Спешил.

Стр = "Х1+Х2+858*Х3";

   имяпеременной = "";
Для каждого й = 1 по СтрДлина цикл
   Сим = Сред(Стр,й,1);

  Если Найти(Сим, "*/+-)(")>0 тогда
    Сообщить(ИмяПеременной)
   ИмяПеременной = "";
  Иначе
    ИмяПеременной = Имяпеременной + Сим
КонецЕсли
КонецЦикла
14 EverGreenMouse
 
01.10.15
21:25
(13) хм, то ли я дурак, то ли хз. При Вашей реализации получаю
Ожидается символ '='
Для каждого й <<?>>= 1 по СтрДлина цикл (Проверка: Толстый клиент (обычное приложение))
15 1sanekmaloi1
 
01.10.15
21:46
(14) Ну так напиши
Для й = 1 по СтрДлина(Стр) цикл
16 Фокусник
 
01.10.15
22:18
(0) сначала все служебные символы заменить на один символ, потом по этому символу разделить на составляющие...
17 Garykom
 
гуру
01.10.15
22:20
(0)
1. Убрать все лишние, незначащие символы (пробелы и т.д.)
2. Составить список разделителей ("+", "*")
3. СтрЗаменить в цикле для каждого разделителя, меняем на разделитель строк
4. Цикл по строкам, если начинается с "X" то убираем этот "X" и остается номер
5. Далее делаем что нужно...
18 Garykom
 
гуру
01.10.15
22:24
(17)+
2-й вариант еще проще, обычная работа с символами в строке
1. Цикл по символам
2. Если "X" то запоминаем что "X" в переменную, продолжаем цикл
3. Если "X" и текущий символ цифра то добавляем цифру к строковой переменной номера,
Иначе если "X" и не цифра то получили номер, используем и обнуляем переменные,
Иначе если не "X" то продолжаем цикл
Закон Брукера: Даже маленькая практика стоит большой теории.