Имя: Пароль:
1C
 
Выделение строк между символами
0 Bob2005
 
09.03.06
18:22
Добрый вечер!

Может у кого есть функция разбивки строки между заданными символами. К примеру, надо разбить предложение на слова.

Заранее благодарен.
1 По идее так 2
 
09.03.06
18:26
(0) если между 2 мя символами - то бредятину получишь ...
2 Bob2005
 
09.03.06
18:27
Ты о чем? Я ж говорю, типа предложения на слова.
3 Diter
 
09.03.06
18:27
Рекурсивная функция в пять-десять строк
4 MikleV
 
09.03.06
18:27
(3)А слова то разные..)
5 Bob2005
 
09.03.06
18:28
Так ... Готов записывать.
6 Ashtray
 
09.03.06
18:28
Не у меня из 11 строк получилось.
7 Bob2005
 
09.03.06
18:28
Надо, например, разбить предложение (без грам. знаков) на составляющие его слова.
8 MuI_I_Ika
 
09.03.06
18:29
глРазложить() или глРазложитьСтроку() посмотри в любой типовой конфе
9 MikleV
 
09.03.06
18:29
(6) Разбеймненасловаэтубредятинуеслиможешьконечно
10 Bob2005
 
09.03.06
18:30
Я это к чему. На VBA такое пишется легко. А вот в 1С не фига не выходит.
11 Diter
 
09.03.06
18:31
Процедура Слова(СписокСлов,Предложение)
Поз=найти(Предложение," ");
СписокСлов.ДобавитьЗначение(Сред(Предложение,1,Поз-1));
Предложение=СокрЛП(Предложение);
Слова(СписокСлов,Предложение);
КонецПроцедуры

// вызов
СписокСлов=СоздатьОбъект("СписокЗначений");
Слова(СписокСлов,СокрЛП(ПредложениеНачальное));
Для Ном=1 по СписокСлов.РазмерСписка() Цикл
Сообщить(СписокСлов.Получить(Ном));
КонецЦикла;
12 Ashtray
 
09.03.06
18:31
(9) ну не все же такую бредятину пишут
13 АЛьФ
 
модератор
09.03.06
18:32
Это типа такого?
стр = СтрЗаменить(Источник," ",РазделительСтрок);
14 Diter
 
09.03.06
18:32
(7) Ха... про знаки препинания это ты вовремя ;))

Тогда ещё нужно добавить

СтрокаСимволов=" ,.!:;";

и вместо

Поз=найти(Предложение," ");

нужно найти любой из этих символов
15 Андрюха
 
09.03.06
18:33
СписокСлов = Новый СписокЗначений;
Вхождение = Найти(" ", Предложение);
Пока Вхождение > 0 Цикл
     Слово = Лев(Предложение, Вхождение - 1);
     СписокСлов.Добавить(Слово);
     Предложение = Прав(Предложение, СтрДлина(Предложение) - Вхождение);
     Вхождение = Найти(" ", Предложение);
КонецЦикла;
СписокСлов.Добавить(Предложение);
16 Diter
 
09.03.06
18:33
(13) прикольно....
17 Гений 1С
 
гуру
09.03.06
18:33
(10) держите меня семь человек. Смешно. Скриптовый язык 1С - тот же ВБА.
18 smaharbA
 
09.03.06
18:34
Функция Split(Стр="",СимвПоиск=",") Экспорт
   Перем Значение;
   Стр=СтрЗаменить(Стр,СимвПоиск,РазделительСтрок);
   Сп=СоздатьОбъект("СписокЗначений");
   Для к=1 По СтрКоличествоСтрок(Стр) Цикл
       Значение=СтрПолучитьСтроку(Стр,к);
       Сп.Установить(""+Значение,Значение);
   КонецЦикла;
   Возврат Сп;
КонецФункции    // Split
19 Парижская фанера
 
09.03.06
18:34
Регулярные выражения доступны и в 1С...
20 Bob2005
 
09.03.06
18:35
На VBA это было бы так:
Public Sub Выделение_строк_между_символами(str1 As String, sym1 As String, el() As String, el_i)
' Нахождение массива строк el() (размером el_i), являющихся включениями в строку str1 между символами sym1
Dim inum()
   i = 1
   j = 1
   Do While i < Len(str1)
       If InStr(i, str1, sym1) <> 0 Then
           ReDim Preserve inum(j)
           inum(j) = InStr(i, str1, sym1)
           i = inum(j) + 1
           j = j + 1
       Else
           i = i + 1
       End If
   Loop
   
   el_i = j - 2
   For k = 1 To el_i
       ReDim Preserve el(k)
       el(k) = Mid(str1, inum(k) + 1, inum(k + 1) - inum(k) - 1)
MsgBox "-" & el(k) & "-"
   Next k
End Sub

А как это будет на 1С?
21 Андрюха
 
09.03.06
18:36
см. (15)
22 smaharbA
 
09.03.06
18:36
(20) Да, уж... В ВБА этт все просче даже...
23 smaharbA
 
09.03.06
18:37
+(22) ArrSLOV=split(stroka," ")
24 romix
 
модератор
09.03.06
18:39
Может, так?

стр=СтрЗаменить(стр," ",""",""");
стр=""""+стр+"""";
сп.ИзСтрокиСРазделителями(стр);
25 Bob2005
 
09.03.06
18:45
(15) Не работает ...
26 Bob2005
 
09.03.06
18:46
(15) Я бы хотел на V7
27 Андрюха
 
09.03.06
18:47
(26) Вуаля:
СписокСлов = СоздатьОбъект("СписокЗначений");
Вхождение = Найти(" ", Предложение);
Пока Вхождение > 0 Цикл
     Слово = Лев(Предложение, Вхождение - 1);
     СписокСлов.Добавить(Слово);
     Предложение = Прав(Предложение, СтрДлина(Предложение) - Вхождение);
     Вхождение = Найти(" ", Предложение);
КонецЦикла;
СписокСлов.Добавить(Предложение);
28 Diter
 
09.03.06
18:49
(27) "Неправильно ты дядя Фёдор колбасу ешь" ©

Тогда уж

СписокСлов = СоздатьОбъект("СписокЗначений");
Вхождение = Найти(" ", Предложение);
Пока Вхождение > 0 Цикл
     Слово = Лев(Предложение, Вхождение - 1);
     СписокСлов.Добавить(Слово);
     Предложение = Прав(Предложение, СтрДлина(Предложение) - Вхождение);
     СписокСлов.Добавить(Предложение);
     Вхождение = Найти(" ", Предложение);
КонецЦикла;
29 Diter
 
09.03.06
18:50
Или так

СписокСлов.Добавить(Слово);

но опять же - со знаками припинания - попа
30 smaharbA
 
09.03.06
18:50
Андрюха - не умничай, все в (18)(тока установить на добавить сменить) и частный случай в (24) давно сьедено и выс...
Могу и короче код дать...И не только я...
31 Bob2005
 
09.03.06
18:52
СписокСлов = СоздатьОбъект("СписокЗначений");
   Предложение = "Ж БРЮКИ BASLER";
   Вхождение = Найти(" ", Предложение);
   Пока Вхождение > 0 Цикл
         Слово = Лев(Предложение, Вхождение - 1);
Сообщить(Слово);          
         СписокСлов.ДобавитьЗначение(Слово);
         Предложение = Прав(Предложение, СтрДлина(Предложение) - Вхождение);
         Вхождение = Найти(" ", Предложение);
   КонецЦикла;
   СписокСлов.ДобавитьЗначение(Предложение);

Вроде должно работать, попробуйте, но у меня не фиксирует ...
32 Андрюха
 
09.03.06
18:52
Я же чтобы человеку понятно было, ёлки-моталки
33 Bob2005
 
09.03.06
18:53
(32) Андрюха, спасибо тебе огромное! Понятно, как раз стало. Просто по факту не выходит.
34 Андрюха
 
09.03.06
18:53
(31) В смысле не фиксирует?
35 Гений 1С
 
гуру
09.03.06
18:53
(20) неужели трудно этот код транслировать на 1С
Redim - на фиг.
InStr - Найти
Mid - Сред
36 Bob2005
 
09.03.06
18:53
Да не делит на три слова.
37 smaharbA
 
09.03.06
18:53
(32) Да я не против, пусть конечно...
(31) позырь (18) и (24)(тока это очень частный вариант)
38 Bob2005
 
09.03.06
18:54
(35) Кстати InStr и Найти гне совместимы ( см параметры)
39 Гений 1С
 
гуру
09.03.06
18:56
(38) Ну дык надо совмещать!
40 Гений 1С
 
гуру
09.03.06
18:56
Сложно что ли
41 Bob2005
 
09.03.06
18:57
(40) Вот пока ковыряюсь ... безуспешно ...
42 Bob2005
 
09.03.06
19:04
(18) Беспрекословно ... отработало.
Спасибо за функцию!

Всем СПАСИБА!
43 smaharbA
 
09.03.06
19:18
(42) Вот тебе один из самых идиотских вариантов
stroka="Ж БРЮКИ BASLER"
scr2=createobject("MSScriptControl.ScriptControl");
scr2.language="vbscript";
scr2.executestatement("a=split(""" & stroka & ""","" "")");
Сообщить(scr2.eval("a(1)"));
44 smaharbA
 
09.03.06
19:19
+(43) Поправочка
stroka="Ж БРЮКИ BASLER"
scr2=createobject("MSScriptControl.ScriptControl");
scr2.language="vbscript";
scr2.executestatement("a=split(""" + stroka + ""","" "")");
Сообщить(scr2.eval("a(1)"));