Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

04.04.13

Разработка - Механизмы платформы 1С

Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

Возникла необходимость написать загрузку данных из клиент-банка в 1с 7.7. Файла формата CSV (iBank2)

И поскольку надо было "очень быстро"  (как это не редко бывет Smile) родилась вот такая функция.

Решил ею поделится т.к. кода очень немного (собственно ключевые всего 3 строки):

        ТекСтрока = СтрЗаменить(ТекСтрока,"""","'");
        ТекСтрока = """" + СтрЗаменить(ТекСтрока,РазделительВФайле ,""",""") + """";
        спЗначений.ИзСтрокиСРазделителями(ТекСтрока);


а кому-то может пригодится как раз когда нужно будет "очень быстро"

Единственное - двойные кавычки " будут заменены на одинарные '.

Но если это не критично то код можно использовать.

Функция ЧтениеФайлаCSV(Путь)
    ТекстФайла = СоздатьОбъект("Текст");
    Попытка
        ТекстФайла.Открыть(Путь);
    Исключение
        Предупреждение("Ошибка отрытия файла " + Путь);
        Возврат "";
    КонецПопытки;
    
    РазделительВФайле = ";"   
    спЗначений = СоздатьОбъект("СписокЗначений");
    Для НомСтр=1 по ТекстФайла.КоличествоСтрок() Цикл
        ТекСтрока = ТекстФайла.ПолучитьСтроку(НомСтр);
        
        // Найдем и заменим в строке символ " на символ ' чтобы при замене разделителей не было ошибки
        // т.о. из строки вида:
        // 123;"ООО "МММ" ";Кафе "Пирожок"
        // получим:
        // 123;'ООО 'МММ' ';Кафе 'Пирожок'
        ТекСтрока = СтрЗаменить(ТекСтрока,"""","'");
   
      
        // добавим в начало и конец строки символ " и заменим разделитель используемый в файле CSV на ","
        // т.о. из:
        // 123;'ООО 'МММ' ';Кафе 'Пирожок'
        // получаем:
        //"123","'ООО 'МММ' '","Кафе 'Пирожок'"
        ТекСтрока = """" + СтрЗаменить(ТекСтрока,РазделительВФайле ,""",""") + """";
 
      
        // а это уже методом ИзСтрокиСРазделителями можно превратить в список
        спЗначений.ИзСтрокиСРазделителями(ТекСтрока);

      
        // Длальше уже обрабатываем как кому нужно
        Стр = "";
        Для Ном = 1 По спЗначений.РазмерСписка() Цикл
            Сообщить(спЗначений.ПолучитьЗначение(Ном, Стр));
        КонецЦикла;   
    КонецЦикла;
КонецФункции

См. также

"Виртуальный" работник на платформе 1C v7.7

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

В статье расписаны примеры из жизни использования "Виртуального" работника. Разобраны вопросы, возникающие при работе с ним.

28.11.2021    1530    user707242_Gold_karas    18    

5

Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы.

Механизмы платформы 1С Платформа 1С v7.7 Абонемент ($m)

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

1 стартмани

06.10.2018    7436    Vortigaunt    5    

11

Особенности разделения объектной модели документа и базы данных в 1С 7.7. Забавный глюк

Механизмы платформы 1С Оперативный учет 7.7 Абонемент ($m)

Когда занимаешься разработкой в среде 1С, редко задумываешься о том, что программным кодом ты работаешь с объектной моделью базы данных, а не с самой базой данных. И что это вообще разные вещи. Ты создаешь объекты: документы и справочники, записываешь их - и в базе данных появляются соответствующие записи. Это настолько привычно, что когда сталкиваешься с нетипичным поведением платформы, первым делом думаешь: надо протестировать базу, она битая. В этой статье я хочу разобрать одну интересную ситуацию, которая как раз демонстрирует такое поведение. Описанная ниже ситуация воспроизводится как в файловом, так и в клиент-серверном (SQL) варианте. Тестировалось на версии платформы 1с77 релиз 027.

1 стартмани

16.05.2018    10110    Vortigaunt    26    

5

Использование классов .Net в 1С для новичков

Механизмы платформы 1С Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    93896    Serginio    116    

188

Все про картинки в 1С 7.7, ну или почти все...

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    43940    95    kitminsk    18    

20

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    23707    tomvlad    5    

14

Динамическая фильтрация в справочнике при вводе наименования

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Позволяет в открытой форме списка, выбора или подбора справочника производить динамическую фильтрацию по набранному наименованию.

02.07.2012    18337    maxpiter    62    

15

Работа с бинарными файлами в 1С 7.7

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Описание принципов и набор инструментов для работы с двоичными данными в 1С 7.7. Примеры во вложениях.

1 стартмани

16.05.2012    31730    100    dusha0020    8    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. orefkov 1152 04.04.13 13:47 Сейчас в теме
Мне одному показалось, что csv на картинке мне фак показывает?
Gang031; zoolog; cool.vlad4; Ibrogim; +4 Ответить
2. cool.vlad4 2 04.04.13 13:50 Сейчас в теме
(1) сам по себе csv - это уже фак.
6. ivisor_fil 10 04.04.13 16:25 Сейчас в теме
(1)
показалось - не хватает пальцев справа :)

(3)
с запяточкой оно конечно да ...
но я создавал статью просто чтобы показать что есть вот такая возможность.
В наименованиях контрагентов и банков я обычно не встречал символа ; потому для КБ посчитал такой вариант уместным. Но для случаев когда ; встречается в данных - будет читать неправильно.
3. orefkov 1152 04.04.13 13:53 Сейчас в теме
12;"А как быть с запяточкой в поле ;?";14
ivisor_fil; +1 Ответить
11. user1455510 21.04.21 05:23 Сейчас в теме
(3) код процедуры для чтения csv по всем правилам rfc: https://infostart.ru/1c/articles/181222/
4. AlexO 135 04.04.13 13:57 Сейчас в теме
(0)
Решил ею поделится

автор, а просто выложить обработку?
5. ivisor_fil 10 04.04.13 16:07 Сейчас в теме
Просто выложить не вижу особого смысла т.к. обработка состои из 2-х частей:
Основной-интерфейстной (в которой происходит интерактив и заполнение реквизитов метаданных)
и обработки относящейся к конкретному банку, которая вызывается из основной, читает данные из файла и возвращает результат через параметр формы.
Основная обработка написана не мной и потому не считаю себя вправе выкладывать ее здесь.
А то что я написал под конкретный банк могу выложить но сама по себе обработка не обладает полным функционалом.
7. МимохожийОднако 140 10.04.13 07:58 Сейчас в теме
Можно еще сделать вторую серию статьи со ссылками на функции общих модулей вместо авторских ))
8. ivisor_fil 10 10.04.13 12:05 Сейчас в теме
(7) МимохожийОднако,
О каких общих модулях речь?
Может вы 8.х имели ввиду?
Так это для 7.7
9. МимохожийОднако 140 10.04.13 20:10 Сейчас в теме
В 7-ке есть глобальный модуль. Там разве нет подобных функций?
10. ivisor_fil 10 10.04.13 20:54 Сейчас в теме
Все же не понимаю о каких функциях речь (приведите пример).
Здесь всего одна функция ЧтениеФайлаCSV. Остальное предопределенные методы объектов 1с 7.7.
Функции чтения CSV в глобальных модулях типовых конфигураций, которые мне попадались или в самом языке 1с 7.7 (без использования ВК)нет.
Поэтому я к сожалению совершенно не пойму что вы подразумеваете под "ссылками на функции общих модулей".
Собственно по тому я и выложил пример быстрого и краткого так сказать "пожарного" способа чтения CSV-файла т.к. ни каких "штатных" средств нет а для 2-3-х едино разовых эпизодических задач обычно не охота писать полноценный парсер.
Оставьте свое сообщение