Имя: Пароль:
1C
1С v8
Как получить номер позиции 30-го символа "&" в строке.
,
0 Галахад
 
гуру
29.03.13
09:07
Покрасивее.
1 НафНаф
 
29.03.13
09:10
Стр = ИсходнаяСтрока;
Для й=1 по 30 Цикл
 Номер = Найти(Стр,"&");
 Стр = Сред(Стр,Номер+1);
КонецЦикла;
Возврат Номер;
2 Ursus maritimus
 
29.03.13
09:13
(1) Некрасиво. Знаки равно нужно выравнивать.
3 НафНаф
 
29.03.13
09:14
(2) учитывая, что я писал прямо в браузере - мне пох
4 Lama12
 
29.03.13
09:15
(0) Ищешь первый. Прибавляешь 29.
5 Зойч
 
29.03.13
09:15
ответ 30
6 sda553
 
29.03.13
09:16
Стр = СтрЗаменить(Стр,"&",Символы.ПС);
НоваяСтрочка             = СтрПолучитьСтроку(Стр, 30);
как то так примерно
7 Лефмихалыч
 
29.03.13
09:18
VBScript.Regexp::match
8 Галахад
 
гуру
29.03.13
09:18
(1) Спасибо.

(4) :-)

(6) И? Где номер позиции?
9 sda553
 
29.03.13
09:20
(8) Пускай программисты делают номер позиции, я лишь идеи даю
10 NWsFF
 
29.03.13
09:20
в (1) никак номер 30-го символа в исходной строке
11 sda553
 
29.03.13
09:21
(8) Заблы добавить, но я телепат и чую, что тебе не номер позиции нужен, а кусок строки, который ты хочешь зная номер выкусить. Я просто уже дальше пошел
12 kosts
 
29.03.13
09:24
Детский сад

Цикл к по количествосимволов в строке
   Если Сред(Исходная Строка, номер позиции, 1) = нужный символ Тогда
       Счетчик = Счетчик + 1
       Если Счетчик = 30
           Прервать
       Конец если
   Конец если
Конец цикла
13 Эмбеддер
 
29.03.13
09:28
(12) я бы тоже такой код написал, но (6) действительно крут!
14 kosts
 
29.03.13
09:32
(13) При условии, что в строке нет разделителей строк. Но об этом в (0) ничего не говориться...
15 kosts
 
29.03.13
09:35
Плохо, что в платформе нет таких встроенных функций.
Иногда нужны, но приходится огород городить.
В т.ч. в запросах...
16 Галахад
 
гуру
29.03.13
09:35
(11) Не. Ее не нужно выкусывать, а изменить. Как?
17 kosts
 
29.03.13
09:37
(16) К 16 посту выяснили, что на самом деле нужно было...
18 НафНаф
 
29.03.13
09:40
в (1) тупанул, там суммировать еще надо
19 Эмбеддер
 
29.03.13
09:45
(15) на самом деле если нам надо найти 30-й символ &, то наверняка надо найти и с 1-го по 29-й и также их обработать как 30-й, поэтому такая функция поиска вряд ли нужна
20 МихаилМ
 
29.03.13
09:48
СтрЧислоВхождений()
и метод вилки
21 NWsFF
 
29.03.13
09:51
Самый красивый вариант имхо в (12) чем понятнее тем красивее.
22 МихаилМ
 
29.03.13
09:55
(21)
к сожалению 1с8.(0..2)

очень медленно работает со стороками.

так что посимвольный разбор - сомнительная красота.
23 Serg_1960
 
29.03.13
10:08
Ммм.. если мы гворим об N-вхождении, то желательно убедиться что оно есть. Намекаю на СтрЧислоВхождений()
24 Эмбеддер
 
29.03.13
10:19
(23) больше проверок - больше ошибок, сложнее код. зачем это надо, если мы отловим эту ситуацию и без дополнительных проверок.
да, предварительная проверка ускорит выполнение, когда условие не выполнится, и наоборот
25 НЕА123
 
29.03.13
10:26
(22)
пятница.
плагиат (12)
   Если КодСимвола(Исходная Строка, номер позиции, 1) = нужныйКодсимвола Тогда
       Счетчик = Счетчик + 1
       Если Счетчик = 30
           Прервать
       Конец если
   Конец если
Конец цикла

плагиат (6)
Стр = СтрЗаменить(Стр,"&",Символы.ПС);
НомерПозиции = 30;
Для й=1 по 30 Цикл
НомерПозиции = НомерПозиции + СтрДлина(СтрПолучитьСтроку(Стр, 30));
Возврат Номер;
26 НЕА123
 
29.03.13
10:27
* НомерПозиции = НомерПозиции + СтрДлина(СтрПолучитьСтроку(Стр, й));
27 Галахад
 
гуру
29.03.13
10:28
(26) А символы.ПС кто считать будет?
28 НЕА123
 
29.03.13
10:43
(27)
НомерПозиции = 30;
29 Галахад
 
гуру
29.03.13
10:45
(28) Классно. Решение в лоб. :-)
30 Serginio1
 
29.03.13
11:55
Функция НайтиВПодстроке(Стр,Поз1,ИскомыйСимвол)
       поз=Найти(Стр,ИскомыйСимвол);
     Если поз=0 Тогда
         возврат ложь
     КонецЕсли;
     поз1=поз1+поз;
        Стр=Сред(Стр,поз+1);

возврат Истина
КонецФункции

рез=0;
Для сч=1 по 30 Цикл
Если не НайтиВПодстроке(Стр,рез,ИскомыйСимвол) Тогда
прервать;
КонецЕсли;
КонецЦикла;

Не проверял но где то так.
31 Serginio1
 
29.03.13
13:51
рез=0 нужно установить если Число вхождений меньше

Если не НайтиВПодстроке(Стр,рез,ИскомыйСимвол) Тогда
рез=0;
прервать;
КонецЕсли;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший