Имя: Пароль:
1C
1С v8
Помощь в чтении строки и разложения ее в массив
0 serg-lom89
 
22.05.15
14:31
подскажите как распарсить строку что бы получился массив

вот строка
2015-05-12T15:47:36 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-12T15:48:40 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-12T15:48:54 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-14T14:28:СергейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:00

что бы получился массив

2015-05-12T15:47:36 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015
2015-05-12T15:47:36 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015
2015-05-12T15:47:36 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015

Примерно такой массив
Подскажите а то что не могу допереть.как привязаться к двум разделителям что ли?
1 sergeev-ag-1977
 
22.05.15
14:34
Есть стандартная процедура , кажется, РазложитьСтрокуВМассив
2 Лефмихалыч
 
22.05.15
14:38
(0) ваша строка - гогно. В ней не хватает разделителей.
Между алексеем и документом должен быть разделитель, а его нет. Перед ГУИДом тоже нет разделителя, равно как и - после
3 Tateossian
 
22.05.15
14:39
(2) В данном случае - отсутствие разделителей и есть разделитель:)
4 Лефмихалыч
 
22.05.15
14:42
(3) нет ножек - нет варенья. Всё просто
5 anatoly
 
22.05.15
14:44
(1) ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок()
6 Fish
 
22.05.15
14:45
(0) Последовательность действий такова:
1) Оторвать руки изобретателю такой строки;
2) Пришить их обратно и заставить переделать на нормальную строку с разделителями;
3) Воспользоваться функцией из типовых.
4) Наслаждаться.
7 НЕА123
 
22.05.15
14:50
(2)+1
Стр = СтрЗаменить(СтрКал,"."Символы.ПС);
к=1;
Пока к < СтрЧислоСтрок(Стр);
ЭлМасс= СтрПолучитьСтроку(Стр,к)+
СтрПолучитьСтроку(Стр,к+1)+
СтрПолучитьСтроку(Стр,к+2)+
СтрПолучитьСтроку(Стр,к+3);
к = к+4;
8 Fragster
 
гуру
22.05.15
14:56
есть мнение, что это извлечениетекста или что-то подобное так из какой-то XML содержимое выдрало
9 KUBIK
 
22.05.15
14:58
Стр="2015-05-12T15:47:36 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-12T15:48:40 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-12T15:48:54 АлексейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:002015-05-14T14:28:СергейDocument.РеализацияТоваровУслугdab219bf-c297-11e4-b826-0025909a5067Реализация товаров и услуг ААС01494800 от 04.03.2015 20:57:00";

Если конструкция в строке регулярная, то можно так попробовать:

Массив=Новый Массив;
Поз=0;

Поз=Найти(Стр,"от");
ПромСтр=Сред(Стр,1,Поз+22); //22 это длина  "от ДД.ММ.ГГ ЧЧ:ММ:СС"
Массив.Добавить(ПромСтр);
Стр=Сред(Стр,Поз+23);

и т.д.
10 Fragster
 
гуру
22.05.15
14:59
только почему не DocumentRef?
11 DS
 
22.05.15
15:01
Судя по "2015-05-12T15:47:36 Алексей..." и "2015-05-14T14:28:Сергей..." очень регулярная...
12 НЕА123
 
22.05.15
15:03
(11)
если с пробелами, то, кажись можно...
Поз=Найти(Стр," от ");
13 KUBIK
 
22.05.15
15:05
(12) +1
так надо
Тогда так
ПромСтр=Сред(Стр,1,Поз+23);//23 это длина  " от ДД.ММ.ГГ ЧЧ:ММ:СС"
14 KUBIK
 
22.05.15
15:07
(12) А то вдруг: "МотяDocument....." :))))
15 Кирпич
 
22.05.15
15:13
регулярные выражения спасут автора
16 serg-lom89
 
22.05.15
15:14
Ну да блин..строки не регулярные..как бы тут тока привязка или Document. или T
17 Лефмихалыч
 
22.05.15
15:14
(15) не спасут
18 Timon1405
 
22.05.15
15:15
Перем RegExp;
Функция РазложитьКакНадо(ВходСтрока)
    Паттерн = "\s\d\d:\d\d:\d\d";
    RegExp.Pattern = Паттерн;
    МассивВыход = Новый Массив;
    МассивНужныхПробелов= RegExp.Execute(ВходСтрока);
    ТекИндексПервойБуквыСлова=1;
    Для каждого ЭлементМассива Из МассивНужныхПробелов Цикл
        ТекЭлем = Сред(ВходСтрока,ТекИндексПервойБуквыСлова,ЭлементМассива.FirstIndex+1-ТекИндексПервойБуквыСлова);
        ТекИндексПервойБуквыСлова = ЭлементМассива.FirstIndex+10;
        МассивВыход.Добавить(ТекЭлем);
    КонецЦикла;
    Возврат МассивВыход;
КонецФункции

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Истина;
RegExp.MultiLine = Истина;
19 НЕА123
 
22.05.15
15:16
ээээ....
(7)сторно
ибо бредятина полная.
20 alex74
 
22.05.15
15:17
Не каждую строку можно (и нужно) разлагать в массив
21 Лефмихалыч
 
22.05.15
15:17
(18) это и без регэкспа можно. Но даже регэксп не сможет в общем случае Алексея от Document отодрать, простите за слэнг
22 Кирпич
 
22.05.15
15:19
(21) чо эт не может. очень даже может
23 Timon1405
 
22.05.15
15:23
(21) не знаю, что там далее в планах у автора делать с Алексеем и Documentом, но исходное ТЗ мои 10 строчек покрывают)
24 hhhh
 
22.05.15
15:25
здесь как раз Document. - это разделитель.
25 Buster007
 
22.05.15
15:41
по знаку "-" можно разложить без проблем.
26 Кирпич
 
22.05.15
16:08
Функция ПолноеРазложение(ВходСтр)
МассивВыход = Новый Массив;
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Истина;
RegExp.MultiLine = Истина;
RegExp.Pattern = "(\d{4}\-\d{2}\-\d{2})([\S ]+?)(\d{2}\.\d{2}\.\d{4})";
МассивСтрок = RegExp.Execute(ВходСтр);
    Для Каждого ЭлементМассива Из МассивСтрок Цикл
        МассивВыход.Добавить(ЭлементМассива.Value);
    КонецЦикла;
RegExp = "";
Возврат МассивВыход;
КонецФункции