|
Разбить строку в массив подстрок | ☑ | ||
---|---|---|---|---|
0
БИР
10.11.18
✎
20:53
|
Всем привет. Я новичек в этом деле. Подскажите как разбить строку в массив подстрок на примере. Очень поможете. У меня Контрагенты.АдресЭлектроннойПочты содержит несколько адресов. Потом не могу понять как это все добавить в Сообщения.Получатели.Добавить.
|
|||
1
lEvGl
гуру
10.11.18
✎
20:54
|
в типовых есть функция, так и называется "разобратьстрокувмассивподстрок", если самописька, то скопируйте
|
|||
2
БИР
10.11.18
✎
21:01
|
Я ее там нашла, но не могу понять, что куда подставлять. Всяко пробовала, не работает. Туго до меня доходит эта функция.
вот код: Функция РазложитьСтрокуВМассивПодстрок(Знач АдресЭлектронноПочты, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт Результат = Новый Массив; // для обеспечения обратной совместимости Если ПропускатьПустыеСтроки = Неопределено Тогда ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); Если ПустаяСтрока(АдресЭлектронноПочты) Тогда Если Разделитель = " " Тогда Результат.Добавить(""); КонецЕсли; Возврат Результат; КонецЕсли; КонецЕсли; Позиция = Найти (АдресЭлектронноПочты, ","); Пока Позиция > 0 Цикл Подстрока = Лев(АдресЭлектронноПочты, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Результат.Добавить(Подстрока); КонецЕсли; Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); Позиция = Найти(Строка, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда Результат.Добавить(Строка); КонецЕсли; Возврат Результат; КонецФункции |
|||
3
БИР
10.11.18
✎
21:03
|
(1) Посмотрите пожалуйста.
|
|||
4
NorthWind
10.11.18
✎
21:05
|
МассивСтрок = РазложитьСтрокуВМассивПодстрок (ТоЧтоНадоРазложить);
Для Каждого Строчка В МассивСтрок Цикл Сообщить (Строчка); КонецЦикла; |
|||
5
lEvGl
гуру
10.11.18
✎
21:07
|
у вас строка вида
строка = "текст1;текст2"; передаете РазложитьСтрокуВМассивПодстрок(Строка, ";") получаете массив текст1 текст2 |
|||
6
lEvGl
гуру
10.11.18
✎
21:10
|
внутрь фнункции даже не смотрите, там много и непонятно, наверно никому)
|
|||
7
БИР
10.11.18
✎
21:10
|
(4) МассивСтрок = РазложитьСтрокуВМассивПодстрок (Контрагент.АдресЭлектроннойПочты);
Для Каждого Строчка В МассивСтрок Цикл Сообщить (Строчка); КонецЦикла; Ругается Ожидается символ '=' Для Каждого Строчка <<?>>В МассивСтрок Цикл (Проверка: Толстый клиент (обычное приложение)) |
|||
8
NorthWind
10.11.18
✎
21:14
|
Дико извиняюсь за невнимательность.
|
|||
9
БИР
10.11.18
✎
21:14
|
(5) т. е. надо написать
РазложитьСтрокуВМассивПодстрок(Строка, ";") строка = "адрес электронной почты"; А потом массив добавить в Сообщение.получатели.Добавить(Массив); |
|||
10
NorthWind
10.11.18
✎
21:14
|
Для каждого Строчка Из МассивСтрок .... читать так
|
|||
11
mmmarat
10.11.18
✎
21:14
|
(0) стрразделить используйте
|
|||
12
lEvGl
гуру
10.11.18
✎
21:18
|
(9)
Для Каждого Строка Из РазложитьСтрокуВМассивПодстрок(Строка, ";") Цикл Сообщение.Получатели.Добавить(Строка); Конец все недословно |
|||
13
lEvGl
гуру
10.11.18
✎
21:19
|
розберайтесь ^)
|
|||
14
БИР
10.11.18
✎
21:24
|
(10) написал ошибку при отправке
Итератор для значения не определен Для Каждого Строчка Из МассивСтрок Цикл |
|||
15
lEvGl
гуру
10.11.18
✎
21:26
|
с ошибками "итератор не определен" - в учебники
|
|||
16
БИР
10.11.18
✎
21:43
|
Снова при отправке написал итератор не определен
Для Каждого Строка Из МассивСтрок Цикл Строка = "Адрес электронной почты"; МассивСтрок = РазложитьСтрокуВМассивПодстрок (Строка, ","); Для Каждого Строка Из МассивСтрок Цикл Сообщение.Получатели.Добавить(Строка); КонецЦикла; |
|||
17
lEvGl
гуру
10.11.18
✎
21:45
|
четайте 12
|
|||
18
lEvGl
гуру
10.11.18
✎
21:47
|
там в Строке должен быть текст вида "текст1%текст2"
|
|||
19
lEvGl
гуру
10.11.18
✎
21:48
|
раделитель %
|
|||
20
БИР
10.11.18
✎
21:55
|
(19) Не совсем понимаю как я строку адрес электронной почты с несколькими адресами разделю "%",
У меня у контрагента в карточки есть одна строка в которой записаны адреса через запятую. |
|||
21
big
11.11.18
✎
07:24
|
ТС лучше удачно выйти замуж и не насиловать себе голову
|
|||
22
echo77
11.11.18
✎
08:27
|
А где фоточка?
Смените пол в карточке на форуме, вы же не мужик? |
|||
23
echo77
11.11.18
✎
09:04
|
А как найти все вхождения подстроки в строку?
|
|||
24
Мыш
11.11.18
✎
09:24
|
(23) СтрНайти
|
|||
25
Мимохожий Однако
11.11.18
✎
09:39
|
офф:"угадал все буквы,но не смог назвать слово"
|
|||
26
osa1C
11.11.18
✎
10:03
|
(22) неужели традиция форума ещё сохранилась? Я думал уже все забыли о ней
|
|||
27
lEvGl
гуру
11.11.18
✎
10:03
|
(25) пусть разбирается, че, первая функция в жизни должна запомниться навсегда
|
|||
28
БИР
11.11.18
✎
11:57
|
(22) Фото загрузила, пол сменила. Надеюсь поможет...
|
|||
29
Михаил Иванович
11.11.18
✎
13:19
|
(28) "Фото загрузила, пол сменила" - а теперь замуж.
|
|||
30
osa1C
11.11.18
✎
13:45
|
(28) теперь конечно поможет. Традиция форума ... девушки только с фото, тогда любой готов помочь по любому вопросу
|
|||
31
ejikbeznojek
12.11.18
✎
10:56
|
Обманули девушку то?)
|
|||
32
NorthWind
12.11.18
✎
11:28
|
(31) простимулировали разобраться самостоятельно, я бы так сказал. Дав всю необходимую инфу и немного сверху.
|
|||
33
Малыш Джон
12.11.18
✎
11:39
|
(0) СтрРазделить() не предлагать? или платформа не позволяет?
|
|||
34
БИР
12.11.18
✎
17:01
|
(33) Добрый день! Делаю через СтрЗаменить и вывожу сообщить. Массив показывает правильно, все адреса в столбик. Но когда начинаю писать для каждого-выдает сообщение интератор не определен.
|
|||
35
БИР
12.11.18
✎
17:04
|
СтрокаСРазделителями = Контрагент.АдресЭлектроннойПочты;
МногострочнаяСтрока = СтрЗаменить(СтрокаСРазделителями, ",",Символы.ПС); Для СчЦ = 1 по СтрЧислоСтрок(МногострочнаяСтрока) Цикл Сообщить(СтрПолучитьСтроку(МногострочнаяСтрока,СчЦ)); КонецЦикла; Как данный код прописать для каждого, после цикла Сообщение.Получатели.Добавить я уже второй день не могу решить данную головоломку. Везде ошибка "интератор не определен". |
|||
36
hhhh
12.11.18
✎
17:18
|
(35) МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",");
Для Каждого Стр Из МассивСтрок Цикл Сообщить(Стр); КонецЦикла; |
|||
37
БИР
13.11.18
✎
12:49
|
(36) Спасибо,большое. Вот этот вариант заработал, только теперь у меня в строчке из 5 адресов отправляется на последний адрес, а 4 пропускает, почему так может быть?.
|
|||
38
БИР
13.11.18
✎
12:49
|
Всем, спасибо большое.
|
|||
39
БИР
13.11.18
✎
12:55
|
Подскажите, как можно сделать, дайте хоть направление на какие функции обратить внимание: хочу сделать отправку писем по одной кнопке, но считывание должно идти по справочнику контрагенты и, если, на этого контрагента заполнен макет(он будет заполнятся автоматически), то делать отправку.
|
|||
40
ДенисЧ
13.11.18
✎
12:57
|
(39) А в чём конкретно проблема? Перебрать контрагентов и определить, есть ли у них макет (я не знаю, как он у вас задаётся)?
Или как отпправить письмо? |
|||
41
БИР
13.11.18
✎
13:00
|
(40) в макет вытягиваются данные, которые попадают отбором по определенному комментарию, и процедура на макет сделана отдельно.
|
|||
42
БИР
13.11.18
✎
13:00
|
(40) все это не могу связать.
|
|||
43
ДенисЧ
13.11.18
✎
13:01
|
(41) И? В чем загвоздка-то?
|
|||
44
БИР
13.11.18
✎
13:04
|
(43) процесс в голове не укладывается. т.е. первое пишем заполнение макета по комментарию? А потом проверяем если на контрагента есть заполненный макет, то отправляем?
|
|||
45
ДенисЧ
13.11.18
✎
13:05
|
(44)
1. Выбираем всех контрагентов, кому нужно отправить 2. для каждого выбранного формируем печатную форму. 3. для каждой печатной формы формируем письмо. Вроде всё просто, как две ноты на рояле... |
|||
46
БИР
13.11.18
✎
13:06
|
(45) Спасибо, попробую.
|
|||
47
tesseract
13.11.18
✎
13:06
|
(39) В сторону найма программиста.
|
|||
48
БИР
13.11.18
✎
13:08
|
(47) Мир не без добрых людей.
|
|||
49
novichok79
13.11.18
✎
13:09
|
(48) иногда быстрее и дешевле нанять профессионала, чем потом исправлять допущенные ошибки.
|
|||
50
ДенисЧ
13.11.18
✎
13:10
|
(49) А если такие задачи возникают постоянно? Сейчас поковыряется, научится, а через год таких, как ты будет сама тут учить и тыкать носом...
|
|||
51
novichok79
13.11.18
✎
13:14
|
(50) если задачи будут именно такими, то эта девушка станет экспертом по работе с стрразделить...
что будет учить - возможно, но вот чему-то новому научить - маловероятно. |
|||
52
novichok79
13.11.18
✎
13:17
|
(50) чтобы быть хорошим айтишником, этим надо жить... желательно с детства, ибо стек технологий очень широк и постоянно расширяется.
|
|||
53
Garykom
гуру
13.11.18
✎
13:32
|
(52) Когда стек технологий слишком уширяется и выходит за пределы возможностей людей то происходит специализация с жестким разделением на разные профессии, которым надо учиться отдельно.
Короче понятие "айтишник" - скоро перейдет в понятие подобное "врач". |
|||
54
Garykom
гуру
13.11.18
✎
13:33
|
(53)+ или понятие "инженер"
|
|||
55
novichok79
13.11.18
✎
15:24
|
(53) да, по-моему уже... есть сис. админы, программисты 1С, веб-программисты, фуллстэк, фронтенд, бэкенд, и т. д.
в идеале - чем больше ты знаешь, тем лучше. |
|||
56
ДенисЧ
13.11.18
✎
15:43
|
(55) "чем больше ты знаешь"...
Тем меньше умеешь |
|||
57
d4rkmesa
13.11.18
✎
15:46
|
(52) Хехе, с возрастом энтузиазм значительно угасает. Оглянуться не успеете, а вокруг уже одни дата сайентисты.
|
|||
58
Garykom
гуру
13.11.18
✎
15:48
|
(56) Тем больше ты знаешь того чего не умеешь
|
|||
59
Lamer1C
13.11.18
✎
15:50
|
(0) СтрРазделить() уже было?
|
|||
60
ДенисЧ
13.11.18
✎
15:51
|
(59) Нет, первым будешь
|
|||
61
novichok79
13.11.18
✎
17:27
|
(57) работаю на хайлоаде, в компании два аналитика Big Data. так что вокруг уже дата сайентисты.
|
|||
62
tesseract
13.11.18
✎
17:37
|
(61) >>так что вокруг уже дата сайентисты.
Это у которых с SQL и математикой плохо, а с языком хорошо? |
|||
63
БИР
14.11.18
✎
05:54
|
Подскажите, почему при отправке письма из строки читается только последний адрес электронной почты, а при просмотре массив показывает правильно. В чем может быть дело?
|
|||
64
hhhh
14.11.18
✎
07:10
|
(63) ну вы покажите как отправляете
Все на каких-то экстрасенсов надеетесь? Которые по завихрпнию колец Сатурна определят, почему у вас письмо не отправляется. |
|||
65
Nikoss
14.11.18
✎
08:15
|
(36) СтрРазделить работает на, что-то вроде, 5% медленнее процедуры из типовых. 1С такая 1С...
|
|||
66
БИР
14.11.18
✎
08:16
|
(64) отправляю так:
Сообщение.Получатели.Добавить(Стр); массив: МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС); Для Каждого Стр Из МассивСтрок Цикл Сообщить(Стр); КонецЦикла; |
|||
67
БИР
14.11.18
✎
08:18
|
(65) Приходит позже-это да. Но первый адрес пропускает все-равно.
|
|||
68
Мелифаро
14.11.18
✎
08:18
|
(66) Посмотрите отладкой, что у вас в Сообщение.Получатели после цикла лежит.
|
|||
69
Мелифаро
14.11.18
✎
08:19
|
И покажите весь код, включая добавление получателей в цикле.
|
|||
70
hhhh
14.11.18
✎
08:24
|
(65) ты не прав, стрРазделить работает в десятки тысяч раз быстрее типовых процедур. У меня была задача: разобрать текстовую строку, состоящую из 18000 строк. При помощи цикла и типовых процедур из 1с выполнялось около минуты. Заменил на СтрРазделить, теперь выполняется практически мгновенно, меньше секунды.
|
|||
71
БИР
14.11.18
✎
08:25
|
(69) У меня нет получателей в цикле. у меня из массива в сообщения встает Стр
|
|||
72
Мелифаро
14.11.18
✎
08:28
|
(71) Что?
Вам надо добавить получателей, как вы их добавляете из массива строк? |
|||
73
Nikoss
14.11.18
✎
08:30
|
(70) у меня немного другая ситуация была.
Что-то типа 500к строк в цикле, с разделением каждой (по 32 значения в каждой строке) |
|||
74
dezss
14.11.18
✎
08:53
|
(71)
МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС); Для Каждого Стр Из МассивСтрок Цикл Сообщение.Получатели.Добавить(Стр); КонецЦикла; |
|||
75
БИР
14.11.18
✎
09:01
|
))) (74)Я так пробовала:
Значение не является значением объектного типа (Получатели) Сообщение.Получатели.Добавить(Стр); |
|||
76
ДенисЧ
14.11.18
✎
09:03
|
(75) А что у тебя "Получатели" ?
Может, всё-таки отладчик запустить? |
|||
77
Мелифаро
14.11.18
✎
09:03
|
Я ничего не понял.
В (66) вы пишете, что отправляете так, в (75) - оно выдаёт ошибку. Или вы думаете, что факт нахождения объекта Сообщение в цикле меняет состав его свойств? |
|||
78
БИР
14.11.18
✎
09:23
|
(76) Отладчик ничего не показывает. Не спотыкается. Сама не могу ничего понять. Точку останова ставлю и запускаю отладку.
|
|||
79
Мелифаро
14.11.18
✎
09:24
|
(78) Вы можете весь код показать, включая тот участок, где получателей заполняете?
|
|||
80
БИР
14.11.18
✎
09:34
|
(79) Почта = Новый ИнтернетПочта;
Попытка Почта.Подключиться(ПолучитьПрофиль()); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС); Для Каждого Стр Из МассивСтрок Цикл Сообщение.Получатели.Добавить(Стр); КонецЦикла; // Создадим почтовое сообщение Сообщение = Новый ИнтернетПочтовоеСообщение; Текст = Сообщение.Тексты.Добавить("Вопросы …); Сообщение.Отправитель = " адрес"; Сообщение.ИмяОтправителя = "имя"; Сообщение.Тема = ""; Сообщение.Вложения.Добавить(ИмяВложения, ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла))); |
|||
81
Мелифаро
14.11.18
✎
09:37
|
Паажжите, у вас создание почтового сообщения идёт после добавления в него получателей, что ли?
|
|||
82
ДенисЧ
14.11.18
✎
09:39
|
(80) Милая.... Вы пытаетесь добавить получателей в несуществующий объект...
|
|||
83
БИР
14.11.18
✎
10:08
|
Урааа, теперь все заработало. Тяжело в ученье, зато будет легко в бою... Спасибо всем.
|
|||
84
Мелифаро
14.11.18
✎
10:10
|
Дерзайте =)
|
|||
85
novichok79
14.11.18
✎
11:32
|
(62) нет, чуваки - профи.
|
|||
86
БИР
15.11.18
✎
18:26
|
Всем привет. Сегодня расстроилась... открыла внешний отчет в основной программе и у меня функция СТрразделить не сработала. В чем может быть дело? Почему в тесте работает без проблем, а в основной безе с проблемами.
|
|||
87
FIXXXL
15.11.18
✎
18:37
|
(86) режим совместимости какой стоит в рабочей базе?
|
|||
88
БИР
15.11.18
✎
18:42
|
(87) Где посмотреть? В конфигуратор доступ админ не даст.
|
|||
89
БИР
15.11.18
✎
18:43
|
в тестовой 8.3.2. Поэтому там и сработала стрразделить
|
|||
90
БИР
15.11.18
✎
18:45
|
Ссори 8.3.10
|
|||
91
БИР
15.11.18
✎
20:40
|
ну как исправить ошибку????
|
|||
92
БИР
15.11.18
✎
20:46
|
написала новый код:
Строка = Контрагент.адресЭлектроннойПочты; МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокув МассивПодстрок(строка, ",", Символы.ПС); Для Каждого Строка ИЗ МассивСтрок цикл Сообщение.Получатели.Добавить(Строка) КонецЦикла; При проверке ругается с ссылкой на общий модуль: Если Не ПустаяСтрока и не что- то с подстрокой добавить (подстрока)... ошибку писала по памяти КАк исправить можно? |
|||
93
hhhh
15.11.18
✎
20:54
|
(92) символы.пс выбросить нахрен. Непонятно, откуда вообще это слово у вас присобачилось. может рука соскочила с клавиатуры и самопроизвольно впечатала эту фигню?
|
|||
94
runoff_runoff
15.11.18
✎
21:11
|
СтрЗабей
|
|||
95
Garykom
гуру
15.11.18
✎
21:16
|
(92) "строка" - не надо так делать, имена переменных совпадающие со служебными словами (имена процедур/функций и т.д.)
|
|||
96
БИР
16.11.18
✎
10:14
|
(93) Смешно... про руку
|
|||
97
Малыш Джон
16.11.18
✎
11:18
|
(95) система прекрасно отличает переменную Строка от функции Строка()
но чисто с точки зрения читабельности - да, не очень красиво получается. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |