|
|
|
Строка | ☑ | ||
|---|---|---|---|---|
|
0
VovoV
19.12.05
✎
17:25
|
Как из строки Привет Привет Привет
получить строку Привет П. П.????? |
|||
|
1
mos-ad
19.12.05
✎
17:26
|
глФИО(Строка)
|
|||
|
2
VovoV
19.12.05
✎
17:27
|
??? чего
|
|||
|
3
mos-ad
19.12.05
✎
17:28
|
ой
ФИО("Привет Привет Привет") - это процедура в глобальнике в бух |
|||
|
4
Таня
19.12.05
✎
17:28
|
(2) функция такая есть в ГМ
|
|||
|
5
Terv
19.12.05
✎
17:29
|
это из бухии
//****************************************************************************** // глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество) // // Параметры: // Объект - элемент справочника Сотрудники или Строка // Фамилия - в этот параметр будет записана фамилия сотрудника // Имя - в этот параметр будет записано имя сотрудника // Отчество - в этот параметр будет записано отчество сотрудника // // Возвращаемое значение: // фамилия и инициалы сотрудника // // Описание: // разбирает "наименование" сотрудника по Фамилия, Имя, Отчество // и возвращает фамилию и инициалы сотрудника // Функция глФамилияИмяОтчество(Объект,Фамилия="",Имя="",Отчество="") Экспорт Если ТипЗначения(Объект)=2 Тогда ФИО = глРазделить(СокрЛП(Объект),","); Иначе ФИО = глРазделить(СокрЛП(Объект.Наименование),","); КонецЕсли; ФИО = глРазложить(ФИО," "); Фамилия = ""; Имя = ""; Отчество = ""; Если ФИО.РазмерСписка() > 0 Тогда Фамилия = ФИО.ПолучитьЗначение(1); Если ФИО.РазмерСписка() > 1 Тогда Имя = ФИО.ПолучитьЗначение(2); Если ФИО.РазмерСписка() > 2 Тогда // а вот отчество бывает и не из одного слова Для Сч = 3 По ФИО.РазмерСписка() Цикл Отчество = Отчество + ФИО.ПолучитьЗначение(Сч) + " "; КонецЦикла; Если ПустоеЗНачение(Отчество) = 0 Тогда Отчество = Лев(Отчество,СтрДлина(Отчество)-1); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Возврат Фамилия+?(ПустоеЗначение(Имя)=0," "+Лев(Имя,1)+"."+?(ПустоеЗначение(Отчество)=0,Лев(Отчество,1)+".",""),"") КонецФункции // глФамилияИмяОтчество в ТиС , есть глФИО , точно такая же |
|||
|
6
skunk
19.12.05
✎
17:29
|
не везде ... она такая есть
|
|||
|
7
VovoV
19.12.05
✎
17:30
|
Пасиб
|
|||
|
8
LOD
19.12.05
✎
17:30
|
(6) Но теперь она есть даже в этой ветке :)
|
|||
|
9
Terv
19.12.05
✎
17:32
|
(8) глФИО , немного другая, она более правильно написана
|
|||
|
10
skunk
19.12.05
✎
17:35
|
можно проще...
|
|||
|
11
Terv
19.12.05
✎
17:35
|
(10) пости... в книгу знаний добавим :)
|
|||
|
12
Terv
19.12.05
✎
17:36
|
+11 ошибся - " в базу знаний"
|
|||
|
13
LOD
19.12.05
✎
17:43
|
(10) В одну строку ? ;)
|
|||
|
14
lisss
19.12.05
✎
18:00
|
(0)
Стр = Лев(Стр,Найти(Стр," "))+" "+Лев(Сред(Стр,Найти(Стр," ")+1),1)+"."+Лев(Сред(Сред(Стр,Найти(Стр," ")+1),Найти(Сред(Стр,Найти(Стр," ")+1)," ")+1),1)+"."; |
|||
|
15
lisss
19.12.05
✎
18:01
|
(13) (14)в одну строку.....
|
|||
|
16
skunk
19.12.05
✎
18:09
|
(14)что вернет "Баранов Леонид" ?
за одну не знаю... //******************************************* function GetInitials(strName = "") strName = strreplace(strName, " ", linebreak); strName = strgetline(strName, 1) + " " + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 2), 1) + "." + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 3), 1) + ".", ""), ""); return strName; endfunction не мое... автор Рупор... я так не много доработал |
|||
|
17
LOD
19.12.05
✎
18:10
|
(15) Никто и не сомневался
|
|||
|
18
lisss
20.12.05
✎
09:12
|
ФИО=Лев(ФИО,?(Найти(ФИО," ")=0,СтрДлина(ФИО),Найти(ФИО," ")+1))+?(СтрЧислоВхождений(ФИО," ")=0,"",".")+?(СтрЧислоВхождений(ФИО," ")>1,Сред(Прав(ФИО,СтрДлина(ФИО)-Найти(ФИО," ")),Найти(Прав(ФИО,СтрДлина(ФИО)-Найти(ФИО," "))," ")+1,1)+".","")
|
|||
|
19
skunk
20.12.05
✎
09:15
|
;))) ... не могу .... сдаюсь... не проверял, но сдаюсь....
|
|||
|
20
lisss
20.12.05
✎
09:19
|
(19)не, правда работает... надо только чтоб пробелов не было в начале и в конце... :)
|
|||
|
21
skunk
20.12.05
✎
09:22
|
и между вамилией с именем... да ;)))
в 16 в принципе тоже |
|||
|
22
lisss
20.12.05
✎
09:28
|
(21)по идее, если добавить несколько СокрЛП, то вообще все зашибись будет.... счас доделаю....
|
|||
|
23
skunk
20.12.05
✎
09:29
|
не страдай... все равно ни кто не оценит
|
|||
|
24
lisss
20.12.05
✎
09:48
|
(23)так скучно, делать нечего....
|
|||
|
25
skunk
20.12.05
✎
09:55
|
ну тогда страда
|
|||
|
26
skunk
20.12.05
✎
09:56
|
страдай...
|
|||
|
27
lisss
20.12.05
✎
10:14
|
ФИО = Формат(СокрЛП(ФИО),"С"+?(Найти(СокрЛП(ФИО)," ")=0,Число(СтрДлина(СокрЛП(ФИО))),Число(Найти(СокрЛП(ФИО)," ")-1)))+?(СтрЧислоВхождений(СокрЛП(ФИО)," ")>0," "+Лев(СокрЛП(Сред(СокрЛП(ФИО),Найти(СокрЛП(ФИО)," "))),1)+".","")+?(СтрЧислоВхождений(СокрЛП(Сред(СокрЛП(ФИО),Найти(СокрЛП(ФИО)," ")))," ")>0,Лев(СокрЛП(Сред(СокрЛП(Сред(СокрЛП(ФИО),Найти(СокрЛП(ФИО)," "))),Найти(СокрЛП(Сред(СокрЛП(ФИО),Найти(СокрЛП(ФИО)," ")))," "))),1)+".","")
теперь ваще все круто.... |
|||
|
28
lisss
20.12.05
✎
10:16
|
ух ты... теперь в БЗ.... тогда последнюю добавьте лучше....
|
|||
|
29
skunk
20.12.05
✎
10:20
|
все теперя я в истории...
|
|||
|
30
VadimG
20.12.05
✎
10:21
|
(27) Научил людей в одну строку фигачить, блин.. =)
|
|||
|
31
Прохожий
20.12.05
✎
12:58
|
(31) Один человек "научил" практически в одну строку любые ФИО склонять...
|
|||
|
32
skunk
20.12.05
✎
13:08
|
(31)сам себе... что ли ;))
|
|||
|
33
Рупор абсурда
20.12.05
✎
13:23
|
Почему эта тупая ветка добавлена в БЗ?
|
|||
|
34
NS
20.12.05
✎
13:25
|
(33) Я знаю, но промолчу.
|
|||
|
35
Рупор абсурда
20.12.05
✎
13:27
|
(34) Потому, что инженер такой же?
|
|||
|
36
NS
20.12.05
✎
13:28
|
(35) Не надо меня провоцировать.
|
|||
|
37
lisss
20.12.05
✎
13:47
|
(33)а почему тупая?
|
|||
|
38
smaharbA
20.12.05
✎
14:03
|
СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(СокрЛП(Сред(СокрЛП(...нашли
|
|||
|
39
skunk
20.12.05
✎
14:07
|
на зло врагам ... нас гнетущим..
|
|||
|
40
lisss
20.12.05
✎
14:16
|
(38)???
|
|||
|
41
skunk
20.12.05
✎
14:36
|
не много подправлю еще один косяк Рупора... на случай если вдруг между фамилией и именем оператор набъет два пробела
//******************************************* function GetInitials(strName = "") while find(strName, " ") > 0 do strName = strreplace(strName, " ", " "); enddo; strName = strreplace(strName, " ", linebreak); strName = strgetline(strName, 1) + " " + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 2), 1) + "." + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 3), 1) + ".", ""), ""); return strName; endfunction |
|||
|
42
Рупор абсурда
20.12.05
✎
14:37
|
(41) Опа ... А почему этот косяк носит моё имя?
|
|||
|
43
Пкфте
20.12.05
✎
14:38
|
Куя, исправил...
|
|||
|
44
skunk
20.12.05
✎
14:47
|
(42)так это ты предложил...
|
|||
|
45
Пкфте
20.12.05
✎
14:49
|
Скунки, ты везде у себя на аглицком калякаешь?
ЗЫ извиняй за (43) - всё, импортную писанину больше не читаю... |
|||
|
46
skunk
20.12.05
✎
14:50
|
не поверишь везде...
|
|||
|
47
Пкфте
20.12.05
✎
14:52
|
поверю
|
|||
|
48
Cheater дубль2
20.12.05
✎
14:55
|
(41,44) Косяк Рупора или косяк, исправленный Рупором?
|
|||
|
49
skunk
20.12.05
✎
14:57
|
как подсказали... еще более правильный вариант
//******************************************* function GetInitials(strName = "") if isblankstring(strName) > 0 then strName = ""; else strName = trimall(strName); while find(strName, " ") > 0 do strName = strreplace(strName, " ", " "); enddo; strName = strreplace(strName, " ", linebreak); strName = strgetline(strName, 1) + " " + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 2), 1) + "." + ?(isblankstring(strgetline(strName, 2)) = 0, left(strgetline(strName, 3), 1) + ".", ""), ""); endif; return strName; endfunction |
|||
|
50
skunk
20.12.05
✎
14:59
|
(48)в том варианте который предложил он... были Косячки...
|
|||
|
51
Рупор абсурда
20.12.05
✎
15:00
|
(50) Наговариваешь ты на меня ...
Тебе бы только всё хорошее ругать ... |
|||
|
52
skunk
20.12.05
✎
15:04
|
(51)даже думать не смел
|
|||
|
53
skunk
20.12.05
✎
15:07
|
Рупор абсурда
9 - 21.09.05 - 15:35 Стр=СтрЗаменить(ФИО," ",РазделительСтрок); Стр=СтрПолучитьСтроку(Стр,1)+" "+Лев(СтрПолучитьСтроку(Стр,2),1)+"."+Лев(СтрПолучитьСтроку(Стр,3),1)+"."; взято от сюда Прав, Лев, СокрЛП |
|||
|
54
NS
20.12.05
✎
15:20
|
СтрРазница=1;
Пока СтрРазница>0 Цикл СтрРазница=Стрдлина(стр); Стр=СтрЗаменить(Стр," "," "); // два пробела на один СтрРазница=СтрРазница-Стрдлина(стр); КонецЦикла; |
|||
|
55
skunk
20.12.05
✎
15:21
|
ну все равно это полностью твой код... я просто сделал его не много универсальней...
у тебя кошерно отрабатывался только вариант "Баронов Лев Леонидович" ... у меня за пох "Баронов Лев Леонидович" " Баронов Лев Леонидович " "Баронов Лев Леонидович" "Баронов Лев" "Баронов" |
|||
|
56
NS
20.12.05
✎
15:30
|
Баронов?
|
|||
|
57
skunk
20.12.05
✎
15:39
|
очепятка ... Баранов ...
|
|||
|
58
Рупор абсурда
20.12.05
✎
15:39
|
(53) А мне там код Grant'а понравился ...
Кстати, не знаешь куда он пропал? |
|||
|
59
skunk
20.12.05
✎
15:40
|
нет... я даже не видал... а что там было?
|
|||
|
60
Рупор абсурда
20.12.05
✎
15:49
|
(59) Код там в (12) ...
Я не про пропажу кода спросил, а про пропажу самого Гранта ... :)) |
|||
|
61
skunk
20.12.05
✎
15:54
|
(60)нет куда Грант пропал незнаю ...
а код ... нет о еще кривее чем у тебя ... козябаки теже... а по скорости... твой делает... |
|||
|
62
Cheater дубль2
20.12.05
✎
15:59
|
(55) А проверка на цифры и символы, например %,.>? =)
|
|||
|
63
skunk
20.12.05
✎
16:01
|
(62)за пох... проблема оператора...
|
|||
|
64
smaharbA
20.12.05
✎
16:07
|
А можно набивальщиц посадить, как кто в базе работает с ФИО у них выпрыгивает Ввести строку и они быстренько ее пишут, если тыщ 100 набивальщиц то быстрее любого алгоритму...
|
|||
|
65
Cheater дубль2
20.12.05
✎
16:18
|
(63) Проблема программера, имхо нужно при вводе проверять на недопустимые символы
|
|||
|
66
skunk
20.12.05
✎
16:19
|
"-" - допустимый символ?
|
|||
|
67
Cheater дубль2
20.12.05
✎
16:21
|
(66) да
|
|||
|
68
lisss
20.12.05
✎
16:21
|
(65)вопрос, я что делать с недопустимыми символами? Удалять слово, вырезать, считать раздилителем, вобще оператора нах... посылать?
|
|||
|
69
lisss
20.12.05
✎
16:22
|
+(68) раздЕлителем...
|
|||
|
70
skunk
20.12.05
✎
16:22
|
Опратор вел "Ба-ра-нов" чей косяк?
|
|||
|
71
Cheater дубль2
20.12.05
✎
16:23
|
(68) вырезать, в 80% случаев поможет
|
|||
|
72
lisss
20.12.05
✎
16:25
|
(71)один цикл в три строчки, если есть список недопустимых символов.... тебе написать?
|
|||
|
73
Cheater дубль2
20.12.05
✎
16:25
|
(70) Оператора, только я тебе про двойные пробелы говорил и !?:;%&*()$#@><'"][{}+/
|
|||
|
74
skunk
20.12.05
✎
16:28
|
(74) двойные пробелы... там удаляються... глянь внимательно
|
|||
|
75
skunk
20.12.05
✎
16:28
|
за остальное... надо тебе... ты удаляй... мне нет не надо...
|
|||
|
76
lisss
20.12.05
✎
16:30
|
(73)а двойные пробелы удаляются в обоих алгоритмах
|
|||
|
77
smaharbA
20.12.05
✎
17:56
|
Function Replacet(patrn,replStr,str1)
Set regEx = New regexp regEx.Pattern = patrn regEx.IgnoreCase = true Replacet = regEx.Replace(str1,replStr) End Function str1 = "Петров-и-даже-водкин Василий Алибобаевич ибн Ибрагимович" str1=Replacet("(\s)(.)(\S+)","$1$2.",str1) for i=2 to ubound(split(str1," ")) str1=Replacet("(\.)(\s)(.)(\S+)","$2$3.",str1) next for i=2 to ubound(split(str1," ")) str1=Replacet("(\s)(\S)(\s)"," $2. ",str1) next MsgBox str1 ;) |
|||
|
78
skunk
20.12.05
✎
17:58
|
ржал
|
|||
|
79
smaharbA
20.12.05
✎
17:59
|
Function Replacet(patrn,replStr,str1)
Set regEx = New regexp regEx.Pattern = patrn regEx.IgnoreCase = true Replacet = regEx.Replace(str1,replStr) End Function str1 = "Петров-и-даже-водкин Василий Алибобаевич ибн Ибрагимович" for i=2 to ubound(split(str1," ")) str1=Replacet(" "," ",str1) next str1=Replacet("(\s)(.)(\S+)","$1$2.",str1) for i=2 to ubound(split(str1," ")) str1=Replacet("(\.)(\s)(.)(\S+)","$2$3.",str1) next for i=2 to ubound(split(str1," ")) str1=Replacet("(\s)(\S)(\s)"," $2. ",str1) next MsgBox str1 ;) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |