gifts2017

Аналог ИзСтрокиСРазделителями() из 7.7

Опубликовал Вячеслав (slawa) в раздел Программирование - Практика программирования

Появилась необходимость загружать данные из 1С 7.7 в 8-ку выгруженные с помощью функции сз.ВСтрокуСРазделителями().
Ничего нормального не нашел. Может плохо искал :)
Пришлось изобретать самому.

В разбираемой строке могут быть данные двух типов числа и строки разделенные запятой.

Строка, дополнительно, заключается в двойные кавычки.

Может кому пригодится.

Буду длагодарен за тестирование.

 

 Строка для тестирования:

стр = " 53.35 , ""67"""" ,""""890"", 88.88,,"""",0, ""Груз. накл. С01-000001 (10.01.12)"",""=="""",,,""""==12""""345"",23.32,""123"", 5 , ,";

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ИзСтрокиСРазделителями
.epf 7,25Kb
11.07.12
20
.epf 7,25Kb 20 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Hany (Hany) 10.07.12 18:14
Не имею чести видеть Ваш файл с данными из 7.7, но вот такой простейший вариант разбора строк с разделителями не подошел бы? (Разделитель в данном случае ",")

СтрокаСРазделителями = "2, 43, ""34535345""22, 44";
Сообщить("" + СтрокаСРазделителями);
СтрокаСПереносами = СтрЗаменить(СокрЛП(СтрокаСРазделителями), ",", Символы.ПС);
Сообщить("" + СтрокаСПереносами);
3. Сергей Ожерельев (Поручик) 10.07.12 19:20
4. Андрей Краснокутский (Andry.Boris) 10.07.12 23:29
Старайся... лучше сначала искать...
+ за желание... ;)
5. Вячеслав (slawa) 11.07.12 00:27
(1) Hany, Такую строку невозможно получить с помощью функции ВСтрокуСРазделителями.
СтрокаСРазделителями = "2, 43, ""34535345""22, 44";
Не понятно какого типа 3-й элемент.
Элемент с типом строка должны быть заключен в кавычки.
6. Вячеслав (slawa) 11.07.12 00:37
(2) Поручик, эти варианты я все видел. Зря минуснул.
Не один из них не работает корректно.

Строка для проверки:
стр = " 53.35 , ""67"""" ,""""890"", 88.88,,"""",0, ""Груз. накл. С01-000001 (10.01.12)"",""=="""",,,""""==12""""345"",23.32,""123"", 5 , ,";
7. Сергей Ожерельев (Поручик) 11.07.12 00:45
(6) Минуснул на ашипку, читай пост 3
8. Сергей Ожерельев (Поручик) 11.07.12 00:50
(6) Исправишь, сниму. Заманали своими идиотскими креативами.
9. Альтаир (Altair777) 11.07.12 12:23
(6) slawa, а я минусанул за оформление. Уважайте посетителей портала, раскрасьте код.
10. Альтаир (Altair777) 11.07.12 12:32
Кстати, на каком языке это написано?

Если (_код >= 48) и (_код Возврат Истина;
 ИначеЕсли _код = 46 Тогда // точка
 Возврат Истина;
 КонецЕсли;
11. Сергей Ожерельев (Поручик) 11.07.12 13:46
12. Альтаир (Altair777) 11.07.12 13:48
(11) Поручик, спасибо что напомнил :)
а то я вчера скачал, а плюсануть не успел - забегался...
13. Иван Иванов (Рэйв) 16.07.12 06:31
Функция ИзСтрокиСРазделителями(Значение,Разделитель = ",") Экспорт

Если ТипЗнч(Значение)<>Тип("Строка") Тогда
Сообщить("Функция ИзСтрокиСРазделителями.Некорректный вызов.Переданное значение должно быть строкой.");
Возврат Неопределено;
КонецЕсли;
спЗначения=Новый СписокЗначений;
Если Найти(Значение,Разделитель)=0 Тогда
Сообщить("Функция ИзСтрокиСРазделителями.В переданном значении("""+Значение+""") нет ни одного указанного разделителя("""+Разделитель+""").");
спЗначения.Добавить(Значение);
Возврат спЗначения;
КонецЕсли;

Значение=СтрЗаменить(Значение,Разделитель,Символы.ПС);
Для н=1 По СтрЧислоСтрок(Значение) Цикл
спЗначения.Добавить(СтрПолучитьСтроку(Значение,н));
КонецЦикла;
Возврат спЗначения;

КонецФункции//ИзСтрокиСРазделителями
14. Вячеслав (slawa) 16.07.12 06:39
(13) Рэйв, проверь стр = " 53.35 , ""67"""",""""890"", 88.88,,"""",0, ""Груз. накл. С01-000001 (10.01.12)"",""=="""",,,""""==12""""345"",23.32,""123"", 5 , ,";
что получится в результате работы твоей и моей функции?
15. Иван Иванов (Рэйв) 16.07.12 07:32
(14) Получится вот такое

53.35
"67""
""890"
88.88
""
0
"Груз. накл. С01-000001 (10.01.12)"
"==""
""==12""345"
23.32
"123"
5

Наверное надо повнимательней быть с кавычками:-)
16. Иван Иванов (Рэйв) 16.07.12 07:34
+ все по честному отработало при разделителе ","
17. Вячеслав (slawa) 16.07.12 07:56
(16) Рэйв, не на каждой запятой нужно делить
попробуй эту-же строку подсунуть реальной функции 7.7 ИзСтрокиСРазделителем
Результат будет несколько иной, чем выдает твоя
18. Иван Иванов (Рэйв) 16.07.12 08:09
(17)Если не на каждой, то используй разделитель не равный ","
Например "^". И проставь вместо запятых только в тех местах где надо делить.

Тогда вызов моей функции будет

спСтр=ИзСтрокиСРазделителями(Стр,"^") ;
19. Вячеслав (slawa) 16.07.12 08:14
(18) Рэйв, я это не могу сделать
Есть готовая выгрузка из 7.7 с помощью функции ВСтрокуСРазделителями() ее нужно грузить в 8-ку.
Менять выгрузку из 7.7 нет возможности
20. Иван Иванов (Рэйв) 16.07.12 08:30
(19)А.. Ну это совсем другая песня:-)
Моя функция для работы в 8.
21. Капитан Немо (capitan) 16.09.12 12:52
Плюс
Единственная обработка, которая корректно отработала строку в кавычках, внутри которой есть запятые.
Стандартные из типовых конфигураций от 1С не смогли.
22. Марина Чирина (chmv) 28.11.13 09:15
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа