![]() |
![]() |
|
Выделение строк между символами | ☑ | ||
---|---|---|---|---|
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)")); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |