gifts2017

Быстрый парсинг строк

Опубликовал Алексей Моцык (naghual) в раздел Программирование - Практика программирования

У вас есть необходимость выполнить загрузку данных из текстового файла с разделителями, и в одной строке много значений?
Тогда вот вам на суд мое решение:
Процедура Сформировать()
	Перем Ф, чНомСтроки, сСтрока;
	Перем сзЗначения, сЗнач, чПоз;
	
	сзЗначения = СоздатьОбъект("СписокЗначений");
	Ф = СоздатьОбъект("Текст");
	Ф.Открыть("C:\test.txt");
	Для чНомСтроки = 1 ПО Ф.КоличествоСтрок() Цикл
		сСтрока = Ф.ПолучитьСтроку(чНомСтроки);
		// Следующая строка дана для примера 
		//сСтрока = " NUM | Name | Cat | SubCat | Manufactur | Supplier | Price_Trad | Price_Bye | Price_Sell ";
		сСтрока = """" + сСтрока + """";
		сСтрока = СтрЗаменить(сСтрока, "|", """, """);
		сзЗначения.УдалитьВсе();
		сзЗначения.ИзСтрокиСРазделителями(сСтрока);
		// Следующая строка для демонстрации
		сзЗначения.ВыбратьЗначение(сЗнач, "ТЕСТ", чПоз);
		//
		// Тут проводим необходимые действия над Значениями из СпискаЗначений
		//
	КонецЦикла;
КонецПроцедуры

См. также

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

Комментарии

1. Владислав Чинючин (vcv) 10.01.08 14:40
Очень узкое решение для узкого частного случая. А если символ разделителя встречается в тексте? Тогда обычно значение берется в кавычки, например:
Иванов,"Магадан, улица имени Зека",9,43
В вопросе разбора текстов ни кто еще ничего лучше регулярных выражений не придумал.
2. Naghual (naghual) 10.01.08 15:09
Вы правы, решение ИМЕННО узкое.
Дело в том, что файлы подобной структуры поставляются с уникальным разделителем.
Ваш же пример, можно изначально загружать с помощью ИзСтрокиСРазделителями.

А можно ли использовать в ЧИСТОЙ 1С Регулярные Выражения???
3. Андрей Скляров (coder1cv8) 10.01.08 15:52
(2) А кто мешает? )
СоздатьОбъект("VBScript.RegExp"); и вперед...
4. Naghual (naghual) 10.01.08 16:18
(3) Это будет уже не чистая 1С. :)

Но в итоге вы правы.
5. Михаил Усков (MMF) 10.01.08 16:25
Ф.Открыть("C:test.txt"); черезвычайно медленная операция на больших файлах
6. Naghual (naghual) 10.01.08 16:32
7. Михаил Семенов (Shaman100M) 10.01.08 17:17
С помощью Scripting.FileSystemObject
http://infostart.ru/profile/8196/blogs/261/

А применительно к статье, я пользую немного другую комбинацию:
Код
сСтрока = СтрЗаменить(сСтрока,СимволРазделительВТексте ,РазделительСтрок);
// номер параметра в строке известен, например
Цена = СтрПолучитьСтроку(сСтрока,4)
Показать полностью
8. r_p (smirnov.a) 16.01.08 21:41
"украл" мое решение, за это +1 :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа