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

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

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

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

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

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

 

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

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

22 Comments

  1. Hany

    Не имею чести видеть Ваш файл с данными из 7.7, но вот такой простейший вариант разбора строк с разделителями не подошел бы? (Разделитель в данном случае «,»)

    СтрокаСРазделителями = «2, 43, «»34535345″»22, 44»;

    Сообщить(«» + СтрокаСРазделителями);

    СтрокаСПереносами = СтрЗаменить(СокрЛП(СтрокаСРазделителями), «,», Символы.ПС);

    Сообщить(«» + СтрокаСПереносами);

    Reply
  2. Поручик

    (0) Цыфра пишется через И

    Reply
  3. Andry.Boris

    Старайся… лучше сначала искать…

    + за желание… 😉

    Reply
  4. slawa

    (1) Hany, Такую строку невозможно получить с помощью функции ВСтрокуСРазделителями.

    СтрокаСРазделителями = «2, 43, «»34535345″»22, 44»;

    Не понятно какого типа 3-й элемент.

    Элемент с типом строка должны быть заключен в кавычки.

    Reply
  5. slawa

    (2) Поручик, эти варианты я все видел. Зря минуснул.

    Не один из них не работает корректно.

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

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

    Reply
  6. Поручик

    (6) Минуснул на ашипку, читай пост 3

    Reply
  7. Поручик

    (6) Исправишь, сниму. Заманали своими идиотскими креативами.

    Reply
  8. Altair777

    (6) а я минусанул за оформление. Уважайте посетителей портала, раскрасьте код.

    Reply
  9. Altair777

    Кстати, на каком языке это написано?

    Если (_код >= 48) и (_код Возврат Истина;
    ИначеЕсли _код = 46 Тогда // точка
    Возврат Истина;
    КонецЕсли;
    Reply
  10. Поручик

    (6) Раскраска кода — http://infostart.ru/public/19856/

    Reply
  11. Altair777

    (11) Поручик, спасибо что напомнил 🙂

    а то я вчера скачал, а плюсануть не успел — забегался…

    Reply
  12. Рэйв

    Функция ИзСтрокиСРазделителями(Значение,Разделитель = «,») Экспорт

    Если ТипЗнч(Значение)<>Тип(«Строка») Тогда

    Сообщить(«Функция ИзСтрокиСРазделителями.Некорректный вызов.Переданное значение должно быть строкой.»);

    Возврат Неопределено;

    КонецЕсли;

    спЗначения=Новый СписокЗначений;

    Если Найти(Значение,Разделитель)=0 Тогда

    Сообщить(«Функция ИзСтрокиСРазделителями.В переданном значении(«»»+Значение+»»») нет ни одного указанного разделителя(«»»+Разделитель+»»»).»);

    спЗначения.Добавить(Значение);

    Возврат спЗначения;

    КонецЕсли;

    Значение=СтрЗаменить(Значение,Разделитель,Символы.ПС);

    Для н=1 По СтрЧислоСтрок(Значение) Цикл

    спЗначения.Добавить(СтрПолучитьСтроку(Значение,н));

    КонецЦикла;

    Возврат спЗначения;

    КонецФункции//ИзСтрокиСРазделителями

    Reply
  13. slawa

    (13) Рэйв, проверь стр = » 53.35 , «»67″»»»,»»»»890″», 88.88,,»»»»,0, «»Груз. накл. С01-000001 (10.01.12)»»,»»==»»»»,,,»»»»==12″»»»345″»,23.32,»»123″», 5 , ,»;

    что получится в результате работы твоей и моей функции?

    Reply
  14. Рэйв

    (14) Получится вот такое

    53.35

    «67»»

    «»890»

    88.88

    «»

    0

    «Груз. накл. С01-000001 (10.01.12)»

    «==»»

    «»==12″»345»

    23.32

    «123»

    5

    Наверное надо повнимательней быть с кавычками:-)

    Reply
  15. Рэйв

    + все по честному отработало при разделителе «,»

    Reply
  16. slawa

    (16) Рэйв, не на каждой запятой нужно делить

    попробуй эту-же строку подсунуть реальной функции 7.7 ИзСтрокиСРазделителем

    Результат будет несколько иной, чем выдает твоя

    Reply
  17. Рэйв

    (17)Если не на каждой, то используй разделитель не равный «,»

    Например «#k8SjZc9Dxk». И проставь вместо запятых только в тех местах где надо делить.

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

    спСтр=ИзСтрокиСРазделителями(Стр,»#k8SjZc9Dxk») ;

    Reply
  18. slawa

    (18) Рэйв, я это не могу сделать

    Есть готовая выгрузка из 7.7 с помощью функции ВСтрокуСРазделителями() ее нужно грузить в 8-ку.

    Менять выгрузку из 7.7 нет возможности

    Reply
  19. Рэйв

    (19)А.. Ну это совсем другая песня:-)

    Моя функция для работы в 8.

    Reply
  20. capitan

    Плюс

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

    Стандартные из типовых конфигураций от 1С не смогли.

    Reply
  21. chmv

    Интересно и полезно

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *