Разбор строки CSV без помощи RegExp

21.05.20

Разработка - Универсальные функции

Позволяет обработать CSV строку без использования RegExp. Учитывает вложенные строки с двойными кавычками.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Разбор строки CSV без помощи RegExp:
.epf 6,73Kb
1 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой
Функция РазобратьCSVСтроку(п_стр, п_разд)
	рез = Новый Массив;
	к_откр = Ложь;
	нач_симв=1;
	Для сч=1 По СтрДлина(п_стр) Цикл
		лТекСимв = Сред(п_стр, сч, 1);
		Если лТекСимв = """" Тогда
			Если НЕ к_откр И (сч=1 ИЛИ сч>1 И Сред(п_стр, сч-1, 1)=п_разд) Тогда
				ост_стр = Прав(п_стр, СтрДлина(п_стр)-сч);
				Если Прав(ост_стр,1)="""" ИЛИ Найти(ост_стр, """"+п_разд) <> 0 Тогда
					к_откр = Истина;
					нач_симв = сч+1;
				КонецЕсли;
			ИначеЕсли к_откр Тогда
				Если СтрДлина(п_стр) > сч И Сред(п_стр, сч+1, 1)=п_разд Тогда
					рез.Добавить(Сред(п_стр, нач_симв, сч-нач_симв));
					к_откр = Ложь;
					сч=сч+1;
					нач_симв = сч+1;
					Если СтрДлина(п_стр) = сч Тогда
						рез.Добавить("");
					КонецЕсли;
				ИначеЕсли СтрДлина(п_стр) = сч Тогда
					рез.Добавить(Сред(п_стр, нач_симв, сч-нач_симв));
					к_откр = Ложь;
					нач_симв = сч;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли лТекСимв = п_разд И НЕ к_откр Тогда
			рез.Добавить(Сред(п_стр, нач_симв, сч-нач_симв));
			нач_симв = сч+1;
			Если СтрДлина(п_стр) = сч Тогда
				рез.Добавить("");
			КонецЕсли;
		ИначеЕсли СтрДлина(п_стр) = сч Тогда
			рез.Добавить(Сред(п_стр, нач_симв, сч+1-нач_симв));	
		КонецЕсли;
	КонецЦикла;
	Возврат рез;
КонецФункции

Тестировалось на платформе 8.3.10.

Вступайте в нашу телеграмм-группу Инфостарт

обработка csv

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4120    Abysswalker    10    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    7673    DeerCven    15    

61

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    52673    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7670    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    67139    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9595    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Diversus 2339 21.05.20 15:16 Сейчас в теме
(0) Есть, вот такая внешняя компонента RegEx1CAddin (ссылка сразу на ВК, но ее можно там собрать самому, если есть желание).
Она позволит не симулировать работу regexp, а сделать это полноценно. Если уж очень хочется все таки через regexp ;)
6. agdam_m 6 25.05.20 17:04 Сейчас в теме
(1) За ссылку спасибо, но в данном случае цель прямо противоположная - не использовать RegExp
2. ixijixi 2134 22.05.20 10:29 Сейчас в теме
Ээ, а СтрРазделить чем не подходит?
3. nomad_irk 83 22.05.20 10:40 Сейчас в теме
(2)Наверно тем, что работает с определенной версии платформы, но можно же через СтрЗаменить(Строка, "разделитель", Символы.ПС) сделать и потом работать как с многострочной строкой для получения значения.
4. Идальго 241 23.05.20 19:05 Сейчас в теме
Ну, а РазложитьСтрокуВМассивПодстрок() из старых типовых чем не подходит?
5. agdam_m 6 25.05.20 14:29 Сейчас в теме
(4)Тем, что не учитывает внутренние кавычки. Т.е. такая строка Строка1;"Строка2-1;Строка2-2" при помощи РазложитьСтрокуВМассивПодстрок() будет разложена на 3 подстроки:
Строка1;
"Строка2-1;
Строка2-2"
а нам нужно разложить на 2 подстроки:
Строка1
Строка2-1;Строка2-2
Для отправки сообщения требуется регистрация/авторизация