Разбитие строки на подстроки
10.06.2003
11:48
#1
Люди, есть ли в 1С функция типа split в перле?
Т.е. возвращающая список подстрок, полученных из исходной строки по разделителю.
Нужно файлик с табличкой импортировать в 1С, соотв-но нужны значения столбцов, разделенных ,скажем, табуляцией.
Т.е. возвращающая список подстрок, полученных из исходной строки по разделителю.
Нужно файлик с табличкой импортировать в 1С, соотв-но нужны значения столбцов, разделенных ,скажем, табуляцией.
10.06.2003
15:43
#2
"Вобщем если кому интересно, я сваял аналог split:
//******************************************************************************
// СтрРазбить(<Разделитель>,Строка,СписокПодстрок)
//
// Параметры:
// Разделитель - необязательный параметр,символ разделитель,
// по которому Строка разбивается на подстроки.
// Если не задан в СписокПодстрок возвращается
// список символов строки.
// Строка - исходная строка.
// СписокПодстрок - переменная типа "СписокЗначений",
// в которую возвращается список подстрок.
//
// Возвращаемое значение:
// длина возвращаемого списка
//
// Описание:
// Разделяет строку символов на подстроки по указанному разделителю
//
Функция СтрРазбить(Разд="""",Строчка=0,Список=0)
если (Строчка=0) или (Список=0) тогда
Сообщить("Слишком мало параметров!");
возврат 0;
конецЕсли;
колво=0;
Стр=Строчка;
Список = СоздатьОбъект("СписокЗначений");
Список.УдалитьВсе();
ЧС = ?(СтрДлина(Разд)=0,1,0);
итераций = ?(ЧС=1,СтрДлина(Строчка),СтрЧислоВхождений(Строчка,Разд)+1);
для ит=1 по итераций цикл
РаздПоз = ?(ЧС=1,2,Найти(Стр,Разд));
Если РаздПоз>0 тогда
Поз = РаздПоз-1;
подстр = Лев(Стр,Поз);
Если ЧС=1 тогда
Поз=1;
конецЕсли;
Стр = Прав(Стр,СтрДлина(Стр)-(Поз+СтрДлина(Разд)));
иначе
//последняя итерация
подстр=Стр;
конецЕсли;
Если СтрДлина(подстр)>0 тогда
колво=колво+1;
Список.ДобавитьЗначение(подстр,колво);
конецЕсли;
конецЦикла;
возврат колво;
конецФункции // конец функции СтрРазбить"
//******************************************************************************
// СтрРазбить(<Разделитель>,Строка,СписокПодстрок)
//
// Параметры:
// Разделитель - необязательный параметр,символ разделитель,
// по которому Строка разбивается на подстроки.
// Если не задан в СписокПодстрок возвращается
// список символов строки.
// Строка - исходная строка.
// СписокПодстрок - переменная типа "СписокЗначений",
// в которую возвращается список подстрок.
//
// Возвращаемое значение:
// длина возвращаемого списка
//
// Описание:
// Разделяет строку символов на подстроки по указанному разделителю
//
Функция СтрРазбить(Разд="""",Строчка=0,Список=0)
если (Строчка=0) или (Список=0) тогда
Сообщить("Слишком мало параметров!");
возврат 0;
конецЕсли;
колво=0;
Стр=Строчка;
Список = СоздатьОбъект("СписокЗначений");
Список.УдалитьВсе();
ЧС = ?(СтрДлина(Разд)=0,1,0);
итераций = ?(ЧС=1,СтрДлина(Строчка),СтрЧислоВхождений(Строчка,Разд)+1);
для ит=1 по итераций цикл
РаздПоз = ?(ЧС=1,2,Найти(Стр,Разд));
Если РаздПоз>0 тогда
Поз = РаздПоз-1;
подстр = Лев(Стр,Поз);
Если ЧС=1 тогда
Поз=1;
конецЕсли;
Стр = Прав(Стр,СтрДлина(Стр)-(Поз+СтрДлина(Разд)));
иначе
//последняя итерация
подстр=Стр;
конецЕсли;
Если СтрДлина(подстр)>0 тогда
колво=колво+1;
Список.ДобавитьЗначение(подстр,колво);
конецЕсли;
конецЦикла;
возврат колво;
конецФункции // конец функции СтрРазбить"
Читают тему
(гостей: 1)