damir5 01.10.2003 - 14:07 | Как изменить тртью букву в строке? |
avb 1 - 01.10.2003 - 14:08 | мдя ... |
mianko 2 - 01.10.2003 - 14:10 | "тртью" только попросить модератора |
Morella 3 - 01.10.2003 - 14:10 |
СтрЗаменить(<?>,,) Синтаксис: СтрЗаменить(<СтрИсточник>,<СтрПодстрока>,<СтрЗамены>) Назначение: Возвращает строку, полученную из строки поиска заменой всех вхождений шаблона поиска строкой замены. Параметры: <СтрИсточник> - строка в которой ищем (место поиска); <СтрПодстрока> - строка которую ищем (шаблон поиска); <СтрЗамены> - строка, которой заменяем найденную подстроку (строка замены). |
SnarkHunter 4 - 01.10.2003 - 14:11 | Обобщим: "Как изменить N-ую букву в строке?" |
avb 5 - 01.10.2003 - 14:11 | (3) тоже, мдя ... :))) |
SnarkHunter 6 - 01.10.2003 - 14:13 | (5)Это уже не "мдя", а песец... |
NS 7 - 01.10.2003 - 14:14 | новстр=лев(стр,2)+нужныйсимвол+сред(стр,4); |
ОбезьянаСГранатой 8 - 01.10.2003 - 14:14 |
Функция Туплю(Строка, номер,буква) Возврат Лев(Строка, номер-1)+буква+сред(Строка,номер+1); КонецФункции вот таким, значить, образом |
SnarkHunter 9 - 01.10.2003 - 14:16 | Резюме: обобщенную задачу решила наша любимая обезьянка в (8) |
andreyka 10 - 01.10.2003 - 14:16 | КонечнаяСтрока=Лев(ИсходнаяСтрока,2)+НужнаяБуква+Прав(ИсходнаяСтрока,СтрДлина(ИсходнаяСтрока)-3) |
Мимо Проходил 11 - 01.10.2003 - 14:18 | +(8) Если ДлинаСтр(Строка)<=Номер Тады, и <Строка> - зарезервированное слово |
NS 12 - 01.10.2003 - 14:18 | (9) Для меня задача в (4) - черезчур сложна.... |
SnarkHunter 13 - 01.10.2003 - 14:20 | (12):^) |
ОбезьянаСГранатой 14 - 01.10.2003 - 14:24 | (12) скорее, чересчур проста |
avb 15 - 01.10.2003 - 14:31 |
чё притихли? нет других вариантов решения чтоль? ;) |
СтарПом 16 - 01.10.2003 - 14:39 |
(15) ну если тока так извратиться ;-) Стр - исходная строка, N-номер изменяемой буквы, НоваяБуква - новая буква Стр=Шаблон("[Лев(Стр,N-1)]НоваяБуква[Сред(Стр,N+1)]"); |
СтарПом 17 - 01.10.2003 - 14:42 |
(+16) фу, блин, отправил, посмотрел - лажа... о как... Стр=Шаблон("[Лев(Стр,N-1)]НоваяБуква[Прав(Стр,СтрДлина(Стр)-N)]"); |
avb 18 - 01.10.2003 - 14:45 |
(16,17) почти тоже самое, но всё равно, зачет :) следующий! |
нАсманчик 19 - 01.10.2003 - 15:58 | Мда... А от спросившего даже "спасиба" нет... |
СтарПом 20 - 01.10.2003 - 16:00 | (+19) устыдился... |
AlexUS 21 - 01.10.2003 - 16:16 |
Так эта."N" заменить не проблема! 2 (3) СтрЗаменить(источник,"N",Замена) |
andreyka 22 - 01.10.2003 - 16:20 |
Приемник=""; Для сч=1 по СтрДлина(Источник) Цикл Если Сч=N Тогда Приемник=Приемник+Буква; Иначе Приемник=Приемник+Сред(Источник,Сч,Сч); КонецЕсли; КонецЦикла; |
СтарПом 23 - 01.10.2003 - 16:22 | (21) дык надо заменить буквУ, а не буквЫ ;-) |
Вофка 24 - 01.10.2003 - 16:23 | (22) Забавный итог получится ;) |
СтарПом 25 - 01.10.2003 - 16:25 | (+24) ндяааа, блин... а я тоже поначалу пропустил :-) |
avb 26 - 01.10.2003 - 16:25 | (22) исправишь ошибку, поставлю зачёт ;)) |
andreyka 27 - 01.10.2003 - 16:39 |
20 Приемник=""; торможу: Для сч=1 по СтрДлина(Источник) Цикл Если Сч=N Тогда Приемник=Приемник+Буква; Иначе Приемник=Приемник+Сред(Источник,Сч,1); КонецЕсли; КонецЦикла; |
avb 28 - 01.10.2003 - 16:48 |
(27) ну вот, так то лучче, зачёт! ;) (all) всё, халява кончилась! зачеты будут ставится только за решения, не использующие функции лев(), прав() и сред() |
Доныч 29 - 01.10.2003 - 16:53 | К концу недели выложу внешнюю компоненту на allfiles. |
mianko 30 - 01.10.2003 - 16:59 |
А если не извесно, что в строке. если в сроке вначале шаловливые ручки буха ввели три пробела. если слово в котором надо поменять букву стоит в другом месте предложения. И если на том месте где должна быть заменяемая буква стоит другая(ну пропустил ее бух). |
Доныч 31 - 01.10.2003 - 17:18 | Тогда не взлетит. |
Constantin 32 - 01.10.2003 - 17:57 |
ИсхСтр="АБВГДЕЖ";Ном=3;НовСимв="#"; НовСтр=СтрЗаменить(ИсхСтр,Формат(ИсхСтр,"С"+(Ном+1)),Формат(ИсхСтр,"С"+Ном)+НовСимв); |
avb 33 - 01.10.2003 - 17:59 |
(32) пять с плюсом :)) следующий! |
Constantin 34 - 01.10.2003 - 18:01 | (33) а все, я последний зачет урвал ;) Больше никак |
avb 35 - 01.10.2003 - 18:03 | (34) так уж и "никак"? ;)) |
Gloom 36 - 01.10.2003 - 18:12 | (33)поспешил с зачётом для (32) :)) |
avb 37 - 01.10.2003 - 18:17 |
(36) мдя..., старый стал :( давай зачётку, зачёт автоматом :)) |
Constantin 38 - 01.10.2003 - 18:20 |
(36)ээ..ээ.. нечего на чужом горбу выезжать;) Ну глючек маленький, так этож для совместимости с 1С, как же 1С код и без глючка ;) Главное то ведь ИДЕЯ |
NS 39 - 01.10.2003 - 18:21 |
неправильно работает - это для совместимости??? попробуй НовСимв="1"; |
NS 40 - 01.10.2003 - 18:23 |
не.... не то.... а в чем глюк? 1С не могу сейчас запустить.... |
Constantin 41 - 01.10.2003 - 18:25 | заменяет не 3 символ а 4 |
NS 42 - 01.10.2003 - 18:25 | всё!, въехал! |
avb 43 - 01.10.2003 - 18:26 | (40) второгодник! ;)) |
Золушок 44 - 01.10.2003 - 18:56 |
Гыг-гы парафраз НовСтр=СтрЗаменить(ИсхСтр,Формат(ИсхСтр,"С"+(Ном+1)),Формат(ИсхСтр,"С"+Ном)+НовСимв); НовСтр=Формат(ИсхСтр,"С"+(Ном-1))+НовСимв+СтрЗаменить(ИсхСтр,Формат(ИсхСтр,"С"+(Ном)),""); |
android 45 - 01.10.2003 - 19:24 |
В (32) методологическая ошибка: строка Формат(ИсхСтр,"С"+(Ном+1)) может встретиться в нескольких местах Наверняка поспешили с ТЗ или денег на проект мало выделили. |
JohnShooter 46 - 01.10.2003 - 19:39 |
Гм, еще одно "решение" - Лев, Прав, Сред, формат и Шаблон не используются. Функция Степень(_База,_Степ) Результат=1; Для К=1 По _Степ Цикл Результат=Результат*_База; КонецЦикла; Возврат Результат; КонецФункции Функция HexToDec(Знач _Hex) Экспорт База=16; _Hex=СокрЛП(_Hex); СтаршаяСтепень=СтрДлина(_Hex)-1; Результат=0; счСимволов=1; Пока СтаршаяСтепень >=0 Цикл _HexСимвол=Сред(_Hex,счСимволов,1); Представление=Найти("0123456789ABCDEF",_HexСимвол)-1; Результат=Результат+Представление*Степень(База,СтаршаяСтепень); СтаршаяСтепень=СтаршаяСтепень-1; СчСимволов=СчСимволов+1; КонецЦикла; Возврат Результат; КонецФункции Процедура Сформировать() С=""; Стр="АБВГДЕЖЗИЙКЛМНО"; Ном=3; Символ="1"; Для Ит=1 По СтрДлина(Стр) Цикл С=С+Симв(1); КонецЦикла; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку(С); Т.Записать(КаталогВременныхФайлов()+"pat"); Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку(Стр); Т.Записать(КаталогВременныхФайлов()+"str"); КомандаСистемы("fc /b "+КаталогВременныхФайлов()+"pat.txt "+КаталогВременныхФайлов()+"str.txt > "+КаталогВременныхФайлов()+"res.txt"); Т=СоздатьОбъект("Текст"); Т.Открыть(КаталогВременныхФайлов()+"res.txt"); Рез=""; Для Ит=2 По Т.КоличествоСтрок() Цикл Стр=Т.ПолучитьСтроку(Ит); Стр=СтрЗаменить(Стр," ",РазделительСтрок); Если (Ит-1)=Ном Тогда Рез=Рез+Символ; Иначе Рез=Рез+Симв(HexToDec(СтрПолучитьСтроку(Стр,3))); КонецЕсли; КонецЦикла; Сообщить(Рез); КонецПроцедуры Ф-ция HexToDec взята из HexDumper.epf |
JohnShooter 47 - 01.10.2003 - 19:52 | 2(avb) Хачу зачет :-) |
avb 48 - 01.10.2003 - 20:06 |
(44) парафраз - это почти плагиат? ;) зачет! (47) сори, беру тайм-аут до завтра, я это осмыслить хочу :) чтоб никто меня в некомпетентности судейства не обвинил вот моё решение: ИсхСтр="АБВГДЕЖ";Ном=3;НовСимв="#"; новСтр=""; темпСтр=""; для х=1 по стрДлина(исхСтр) цикл для у=1 по 255 цикл если (у>126)и(у<192) тогда продолжить конецЕсли; если темпСтр+симв(у)>исхСтр тогда прервать конецесли; конецЦикла; темпСтр=темпСтр+симв(у-1); новСтр=новСтр+?(х=ном,новСимв,симв(у-1)); конецЦикла; сообщить(новСтр); |
Э Эх 49 - 02.10.2003 - 09:21 |
Функция ЗаМ(Стр,Ном,С,ПрИт="",СС="",К=1) Б=СтрЗаменить(Формат(Стр,"С"+К),ПрИт,""); СС=?(К>СтрДлина(Стр),СС,ЗаМ(Стр,Ном,С,ПрИт+Б,СС+?(К=Ном,С,Б),К+1)); Возврат СС; КонецФункци Сообщить(ЗаМ("АБВГДЕЖЗ",3,"$")); |
avb 50 - 02.10.2003 - 10:36 |
(47) зачёт! ты - мастер извращений!!! :))) (49) ошибочку прощаю, зачёт! :) |
Э Эх 51 - 02.10.2003 - 11:07 |
(50)Гм... И впрямь... Функция ЗаМ(Стр,Ном,С,ПрИт="",СС="",К=1) Б=СтрЗаменить(Формат(Стр,"С"+К),ПрИт,""); Б=?(Б="",ПрИт,Б); СС=?(К>СтрДлина(Стр),СС,ЗаМ(Стр,Ном,С,ПрИт+Б,СС+?(К=Ном,С,Б),К+1)); Возврат СС; КонецФункции |
avb 52 - 02.10.2003 - 11:21 |
(51) я ж уже поставил зачёт :)) (48) тоже зачёт :))) (алл) не пора ли правила ужесточить? например, запретить использовать формат()? ;) |
JohnShooter 53 - 02.10.2003 - 11:25 | (52) IMHO тогда все решения будут с ВК или типа моего |
Золушок 54 - 02.10.2003 - 11:27 | 52. Ну еще никто не юзал к примеру VBScript, хошь решение с ним? |
avb 55 - 02.10.2003 - 11:33 |
(53) Constantin в (34) уже сказал "больше никак" ;)) (54) халявщик ;)) короче, использование вк, для такой простой задачи считаю нецелесообразным :)) |
Angel IL 56 - 02.10.2003 - 11:42 | Через OLE еще можно |
хитрыйИбольшой 57 - 02.10.2003 - 11:43 |
СтрокаВКоторойНадоЗаменитьБукву = СтрЗаменить(СтрокаВКоторойНадоЗаменитьБукву,Прав(Лев(СтрокаВКоторойНадоЗаменитьБукву,ПозицияБуквы),1),БукваНаКоторуюНужноПоменять); |
хитрыйИбольшой 58 - 02.10.2003 - 11:46 | зачем тут нужны циклы? |
Золушок 59 - 02.10.2003 - 11:47 | 58. Ветку надо внимательнее читать. Твое решение идет самым первым. |
Angel IL 60 - 02.10.2003 - 11:48 | Да ты че!!! без циклов и рекурсии здесь никак!!! |
avb 61 - 02.10.2003 - 11:48 |
(57) решение не подходит под условия для тех, кто в танке, напоминаю: требуется решение, отличное от приведённых выше, для замены N-ного символа в строке на заданный. принимаются решения на языке 1сv77, не использующие вк, функции лев(), прав(), сред() и формат() |
Э Эх 62 - 02.10.2003 - 11:48 | (53) У тебя, кстати, Сред() используется в HexToDec... |
Вофка 63 - 02.10.2003 - 11:51 | (57) А теперь найди грубую ошибку в своём "решении"... |
Малый 64 - 02.10.2003 - 11:52 |
Есть такой вариант: Перем Буквы[128]; Функция Изврат(Стр, Ном, Символ) НоваяСтр = ""; СчетчикЦикла = 0; Для СчетчикЦикла = 1 По СтрДлина(СокрЛП(Стр)) Цикл Буквы[СчетчикЦикла] = Сред(Стр,СчетчикЦикла,1); КонецЦикла; Буквы[Ном] = Символ; СчетчикЦикла = 0; Для СчетчикЦикла = 1 По СтрДлина(СокрЛП(Стр)) Цикл НоваяСтр = НоваяСтр + Буквы[СчетчикЦикла]; КонецЦикла; Возврат НоваяСтр; КонецФункции |
avb 65 - 02.10.2003 - 11:53 | (62) я видел, но решил на это положить, уж больно изврат понравился :)) |
хитрыйИбольшой 66 - 02.10.2003 - 11:53 |
(59) извините (61) это из разряда большим пальцем ноги в носу ковыряться ;) |
хитрыйИбольшой 67 - 02.10.2003 - 11:56 | ошибку вижу, но она, наверное, не грубая, а "невнимательная" |
avb 68 - 02.10.2003 - 11:56 | (64) тоже перечитай (61) |
Э Эх 69 - 02.10.2003 - 11:57 | (64) Это слишком очевидный вариант :) Под условия (61) не подходит... Вот если сможешь достать буквы по порядку без Лев Прав Сред и Формат... |
avb 70 - 02.10.2003 - 12:01 |
перечитал ветку ещё раз, под (61) подходит только (48) получается, будто я, под своё решение условия подогнал :( чесс слово, нечаянно как-то получилось :)) |
Малый 71 - 02.10.2003 - 12:44 |
ДОДЕЛАЛ!!! РАБОТАЕТ!!! Перем Буквы[128]; Функция Изврат(Стр, Ном, Символ) Для СчетчикЦикла = 1 По 128 Цикл Буквы[СчетчикЦикла] = ""; КонецЦикла; ОбратныйЦикл =СтрДлина(СокрЛП(Стр)); НоваяСтр = ""; х = 1; Для х = 1 По СтрДлина(СокрЛП(Стр)) Цикл Если Буквы[х] = "" Тогда Буквы[х] = КодСимв(СокрЛП(Стр)); КонецЕсли; Если СтрЧислоВхождений(Стр,Симв(Буквы[х])) > 0 Тогда Для Н = 1 По СтрДлина(СокрЛП(Стр))Цикл НужныйНомер = Найти(Стр,(Симв(Буквы[х]))); Если НужныйНомер <> 0 Тогда Буквы[НужныйНомер] = Буквы[х]; КонецЕсли; КонецЦикла; Иначе СтрЗаменить(Стр,Симв(Буквы[х]),"") КонецЕсли; КонецЦикла; Буквы[Ном] = КодСимв(Символ); СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ОбратныйЦикл Цикл НоваяСтр = НоваяСтр + Симв(Буквы[СчетчикЦикла]); КонецЦикла; Возврат НоваяСтр; КонецФункции |
avb 72 - 02.10.2003 - 12:58 |
(71) Изврат("ABCDEF", 3, "#") = AA#AAA так было задумано? ;)) |
Малый 73 - 02.10.2003 - 13:01 |
Блин! Счас подправлю, провял на АААААА |
JohnShooter 74 - 02.10.2003 - 13:15 | (7) Исправить HexToDec ? |
JohnShooter 75 - 02.10.2003 - 13:37 |
2(avb) в (46) начало чиать так: Перем ТабПреобразований; Процедура Генерировать() Перем Цифры[16]; Для Ит=1 По 10 Цикл Цифры[Ит]=Ит-1; КонецЦикла; Для Ит=11 По 16 Цикл Цифры[Ит]=Симв(КодСимв("A")+Ит-11); КонецЦикла; ТабПреобразований=СоздатьОбъект("СписокЗначений"); Для Ит1=0 По 15 Цикл Для Ит2=0 По 15 Цикл ТабПреобразований.ДобавитьЗначение(Ит1*16+Ит2,""+Цифры[Ит1+1]+Цифры[Ит2+1]); КонецЦикла КонецЦикла КонецПроцедуры Функция HexToDec(Знач _Hex) Если ТипЗначенияСтр(ТабПреобразований)<>"СписокЗначений" Тогда Генерировать(); КонецЕсли; Возврат ТабПреобразований.Получить(_Hex); КонецФункции |
JohnShooter 76 - 02.10.2003 - 13:42 | to(avb) прошу опровержения (70) - см. (75) :-) |
avb 77 - 02.10.2003 - 13:48 |
(76) йесссс!!! молоток! назначаю тебя старостой группы извращенцев ;)) |
NS 78 - 02.10.2003 - 13:49 | (77) Сам-то - председателем будешь? |
avb 79 - 02.10.2003 - 13:52 |
(78) не, боюсь не оправдать так ..., рядовым членом ... :)) |
JohnShooter 80 - 02.10.2003 - 13:53 | (78) Нет, никак не получится - старост обычно в деканате назначают. Так что avb - уже декан :-) |
JohnShooter 81 - 02.10.2003 - 13:56 | (79) ну вот - а я написал, понадеялся можно сказать :-) |
avb 82 - 02.10.2003 - 14:04 |
коллектив наш не велик, как-нить, наверно, в узком семейном кругу, разберёмся :)) зы: нас ма-а-а-ало... (с) Юнона и Авось ---------------- присоединяйтесь к группе 1С:Извращенцев :))) |
aler 83 - 02.10.2003 - 15:51 |
А можно ещё вот так Функция НоваяСтрока(Стр,НомЗ,НСимв,Сч=0) Если Сч = СтрДлина(Стр) Тогда Возврат ""; КонецЕсли; Сч=Сч+1; Если НомЗ<>Сч Тогда Возврат Сред(Стр,Сч,1)+НоваяСтрока(Стр,НомЗ,НСимв,Сч); Иначе Возврат НСимв+НоваяСтрока(Стр,НомЗ,НСимв,Сч); КонецЕсли; КонецФункции Сообщить(НоваяСтрока("АБВГДЕЁ",3,"@")); |
avb 84 - 02.10.2003 - 15:55 |
(83) условия в (61) избавишься от сред() - добро пожаловать в 1С:Извращенцы |
android 85 - 02.10.2003 - 15:58 | Ветка здорово напоминает эволюцию программиста. |
Hotey 86 - 02.10.2003 - 16:26 | ... а Туплю понял о чем Вы тут, а? |
avb 87 - 02.10.2003 - 16:37 | (86) вот мы все и ждём, когда он проявится со своим "Блин, инет отрубили ...." :)) |
aler 88 - 02.10.2003 - 16:42 |
Без сред, лев и прав это выглядит так: (Правда придется завести ревизит диалога типа поле ввода с длиной 99) Ном=3; Стр= "АБВГДЕЁ"; НСимв="%"; СамаСтрока=Стр; Сч=0; Пока Сч <= СтрДлина(СамаСтрока)-Ном Цикл Стр=СокрЛП(Стр); Пока СтрДлина(Стр)<100 Цикл Стр=" "+Стр; КонецЦикла; ПолеВвода2=Стр; Стр=ПолеВвода2; Сч=Сч+1; Если Сч = СтрДлина(СамаСтрока)-Ном Тогда КонецСтроки=СтрЗаменить(СамаСтрока,СокрЛП(Стр),""); КонецЕсли; КонецЦикла; Сообщить(СокрЛП(Стр)+НСимв+КонецСтроки); |
Староста 1C Извращенцев 89 - 02.10.2003 - 16:46 |
(88) Хорош тут лажу всякую постить, да? Мне вот стало лень вчитваться - просто скопировал в обработку, встваил полеввода - Строка(99) - результат: АБВГДЕЁ% [Team 1С:Извращенцы] |
aler 90 - 02.10.2003 - 16:50 | А у меня на 8-ке такая штука проходит. |
avb 91 - 02.10.2003 - 16:53 |
(89) ты не прав, наверно, идентификатор полю ввода не задал (88) ошибается она, например, на строке " АБВГДЕ" но идея достойна зачёта :)) |
Староста 1C Извращенцев 92 - 02.10.2003 - 16:54 |
(90) Хорош людей разводить, да? Может только если она самописанная,а вот на той что от 1С результат такой же что и в 7.7. [Team 1С:Извращенцы] |
Староста 1C Извращенцев 93 - 02.10.2003 - 16:58 |
(88),(90) Прошу простить и с данног момента можно менять считать полноценным ламером. (Сделал ПолеВвода а не ПолеВвода2 и даже код чиать не стал :-( IMHO старостой можно исчо кого-нить выбрать (91) Да, сэр. Виноват, сэр. :-) [Team 1С:Извращенцы] |
aler 94 - 02.10.2003 - 16:59 | (92) Послушай что люди(91) говорят назови полеввода полеввода2 и всё прокатит |
Староста 1C Извращенцев 95 - 02.10.2003 - 17:00 |
(94) Исчо раз прошу прощения. См (93) [Team 1С:Извращенцы] |
avb 96 - 02.10.2003 - 17:07 | (94) можно, используя твою идею, написать короче и правильно! |
aler 97 - 02.10.2003 - 17:12 | (96)Напиши если не лень, а про то что на "АБВГДЕ" не работает не понял. Какой результат? |
avb 98 - 02.10.2003 - 17:15 |
(97) движок форума пробелы режет короче, проверь: Стр= симв(32)+симв(32)+симв(32)+"АБВГДЕЁ"; |
aler 99 - 02.10.2003 - 17:20 | (98)С пробелами не катит.Согласен. |
Староста 1C Извращенцев 100 - 02.10.2003 - 17:20 |
(98) IMHO это не баг, а фича. [Team 1С:Извращенцы] |
stayer 101 - 02.10.2003 - 17:21 |
To avb. Вообще-то я не программист, но если поставишь зачет, то тожить буду програмить в 1С :) Процедура Заменить() ИсхСтрока="Залет"; НомерБуквы=3; КонСтрока=""; Для ном=1 По СтрДлина(ИсхСтрока) Цикл КонСтрока=КонСтрока+?(ном=НомерБуквы,"ч",Сред(ИсхСтрока,ном,1)); КонецЦикла; Предупреждение(КонСтрока); КонецПроцедуры |
JohnShooter 102 - 02.10.2003 - 17:27 | (101) Не катит - смотри (28),(52) |
avb 103 - 02.10.2003 - 17:34 |
(101) условия в (61) задачка решается в 3 строки :)) используя идею aler'а (88) Ном=3; Стр= " АБВГДЕ"; НСимв="%"; ПолеВвода1=стр; ПолеВвода2=стр; Сообщить(стрЗаменить(стр,ПолеВвода1,ПолеВвода2+нСимв)); полеввода1 - строка 3; полеввода2 - строка 2; |
JohnShooter 104 - 02.10.2003 - 17:38 |
(103) Маэстро, а что получится если на вход подать строку типа: АБВАБВАБВ и т.п. :-( |
avb 105 - 02.10.2003 - 17:42 |
(104) получится "мдя..." :)) всё равно идея не плохая |
СтарПом 106 - 02.10.2003 - 17:42 |
кароче с такими исходными данными я нашел самый быстрый способ... Условия: есть строка "АБВГДЕ" Задача: нужно заменить 3-ю букву на "%"... Решение: Сообщить("Ответ=АБ%ГДЕ","I"); |
JohnShooter 107 - 02.10.2003 - 17:44 | (106) Неправда ваща, исходные данные в (0) |
СтарПом 108 - 02.10.2003 - 17:47 |
(107) а я че, не изменил? да и вообче... если всю ветку почитать... условия упрощаются, но ограничиваются способы решения... |
СтарПом 109 - 02.10.2003 - 17:49 | (+108) да мне и вовсе сейчас наплевать на условия... зачет-то я вчера получил :-) |
avb 110 - 02.10.2003 - 18:05 |
(109) ага, подсуетился, пока халява не кончилась :)) (103)+ Ном=3; Стр= "абвабвабвабвабв"; НСимв="%"; ПолеВвода1=стр; ПолеВвода2=стр; белиберда="!@#$%^&*()"; пока найти(стр,белиберда)<>0 цикл белиберда=белиберда+белиберда; конецЦикла; Сообщить(стрЗаменить(белиберда+стр,белиберда+ПолеВвода1,ПолеВвода2+нСимв)); староста, ставим зачёт aler'у? |
Староста 1C Извращенцев 111 - 02.10.2003 - 18:14 |
(110) Да конечно. Довольно-таки красиво. [Team 1С:Извращенцы] |
avb 112 - 02.10.2003 - 18:15 |
(aler) зачёт! следующий! ;) |
JohnShooter 113 - 02.10.2003 - 18:23 | 2(avb) я вот думаю - надо ветку себе скопировать на память, вдруг потом кому пригодится :-) |
avb 114 - 02.10.2003 - 18:27 | (113) ага, вдруг Туплю за ней вернётся :)) |
andreyka 115 - 02.10.2003 - 18:35 |
Таб=создатьобъект("таблицазначений"); Кон=""; Буква="%"; ИсхСтр="абвгдеж"; для Сч=1 по стрДлина(исхСтр) цикл Таб.НоваяКолонка(,"Строка",стрДлина(исхСтр)-Сч,0); Таб.НоваяСтрока(); Таб.УстановитьЗначение(Сч,Сч,ИсхСтр); Для у=1 по 255 цикл Если Таб.ПолучитьЗначение(Сч,Сч)+симв(у)+Кон=ИсхСтр Тогда Кон=Симв(у)+Кон; КонецЕсли; КонецЦикла; Если СтрДлина(ИсхСтр)-сч=N Тогда Конец=Кон; КонецЕсли; КонецЦикла; КонСтр=Таб.ПолучитьЗначение(стрДлина(исхСтр)-N+1,стрДлина(исхСтр)-N+1)+Буква+Конец; Сообщить(КонСтр); |
Староста 1C Извращенцев 116 - 02.10.2003 - 18:40 |
(115) Да, надо точно ветку сохранить для истории. Может к Camino в гелерею ? Правда не по теме. [Team 1С:Извращенцы] |
avb 117 - 02.10.2003 - 18:40 |
(115) прибавление в семействе :)) зачёт! зы: потерял только: N=3; |
Бодун 118 - 02.10.2003 - 18:44 |
// а если вот так: Функция Вставить(ТипаКуды,ТипаСимвол,ТипаМесто) Перем ШоЕто; Если ТипаМесто>=0 Тогда ШоЕто=?(ТипаМесто=0,ТипаСимвол,Лев(ТипаКуды,1)); ТипаКуды=ТипаКуды-1; Возврат Вставить(ТипаКуды,ТипаСимвол,ТипаМесто); КонецЕсли; Возврат ШоЕто+ТипаКуды; КонецФункции //Вставить // - ????? |
avb 119 - 02.10.2003 - 18:51 |
(118) условия в (61) надо б подвести предварительный итог итак, список сертифицированных 1с:извращенцев 1. СтарПом 2. andreyka (дважды) 3. Constantin 4. Gloom 5. Золушок 6. JohnShooter 7. avb 8. Э Эх 9. aler не густо :( |
Бодун 120 - 02.10.2003 - 19:07 | 2(119): зато (118) ближе по духу к термину "извращеенство"!!! |
avb 121 - 02.10.2003 - 19:09 |
(120) не согласен думаю, что истинные извращенцы меня поддержат |
Бодун 122 - 02.10.2003 - 19:16 |
2(121): проверим! (ау, Эрнест, Борхес, Андрюха!!!))))) |
avb 123 - 02.10.2003 - 19:26 |
(122) зачёт по блату получить хочешь? ;)) ты ещё дядю Колю покличь ... :))) |
Бодун 124 - 02.10.2003 - 19:33 | 2(123): с ДК не знаком... |
Э Эх 125 - 03.10.2003 - 04:13 | Даа... Эту бы энергию, да в военных целях... |
Игого 126 - 03.10.2003 - 06:46 |
// А так пойдёт? Правда для номера символа =1 не работает Функция Замена(Стр,Номер,Символ) Перем Т,С,Длина,ТЗ,Хвост; Длина=СтрДлина(Стр); Если Длина<Номер Тогда Возврат Стр; КонецЕсли; Хвост="Х"; ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяСтрока(); ТЗ.НоваяКолонка(Хвост+(Номер-1),"Строка",(Номер-1)); ТЗ.УстановитьЗначение(1,Хвост+(Номер-1),Стр); С=ТЗ.ПолучитьЗначение(1,Хвост+(Номер-1)); Для Т=Номер По Длина Цикл ТЗ.НоваяКолонка(Хвост+Т,"Строка",Т); ТЗ.УстановитьЗначение(1,Хвост+Т,Стр); Если Т=Номер Тогда С=С+Символ; Иначе С=С+СтрЗаменить(ТЗ.ПолучитьЗначение(1,Хвост+Т),ТЗ.ПолучитьЗначение(1,Хвост+(Т-1)),""); КонецЕсли; ТЗ.УдалитьКолонку(Хвост+(Т-1)); КонецЦикла; Возврат С; КонецФункции |
Wolflab 127 - 03.10.2003 - 07:01 | Это просто писец конкретный. Такого я еще не видел. И не сиделось avb в компании Таксяков, Матрей, Глазьев и неглазьев на одинэссии:)) |
Хрюн Моржов 128 - 03.10.2003 - 07:10 | Мощно задвинули, ВНУШАИТЬ!!! |
SnarkHunter 129 - 03.10.2003 - 07:13 | Самое важное - грамотная и четкая постановка задачи - см. (4) |
Игого 130 - 03.10.2003 - 07:32 |
Ну где же avb, я тоже хочу быть личностью с неортодоксальными биологическими потребностями (извращенец то бишь) :-) Прими зачёт, avb. |
Wolflab 131 - 03.10.2003 - 07:38 | Интересно, кто написал HTTP-робота "Хрюн Моржов"? Тоже такого слабать? Чтобы выбирал произвольную ветку на первой странице и постил "Лажа" |
Тундра 132 - 03.10.2003 - 07:57 |
Wolflab! Что ты так строго? Расслабься. (121). Учитель, похоже, что ты боролся за добавление к характеристикам 1С-овцев еще одного липучего термина? :)) JohnShooter - ты победил! C Hex-ом - это что-то! |
avb 133 - 03.10.2003 - 10:56 |
я проснулся :) (126) счас посмотрю, потерпи (127) таксяк и Глазья - нормальные пацаны, зря ты их в одну компанию с Матрёней записал (132) да фиг с ними, с ярлыками. прикольно даже ;)) |
avb 134 - 03.10.2003 - 11:05 |
(126) идея уже была реализована andreyka'ой в (115) так и быть ставлю зачёт но чтоб стать полноценным извращенцем, тебе надо больше работать над собой извращаться, извращаться и извращаться! :)) |
GluK 135 - 03.10.2003 - 13:53 |
// Прошу принять к расмотрению: Перем Источник,Буква,N; ВремСписок=СоздатьОбъект("СписокЗначений"); Для сч=1 по СтрДлина(Источник) Цикл ВремСписок.ДобавитьЗначение(Сред(Источник,Сч,1)); КонецЦикла; ВремСписок.УстановитьЗначение(N,Буква); Источник=""; Для сч=1 по ВремСписок.РазмерСписка() Цикл Источник=Источник+ВремСписок.ПолучитьЗначение(сч); КонецЦикла; |
avb 136 - 03.10.2003 - 14:08 |
(135) под условия не подходит :( см. (61) |
avb 137 - 03.10.2003 - 14:12 |
хочу быть дважды извращенцем, как andreyka вот вчера накропал стр="АБВГДЕЁЖЗ"; номер=5; символ="#"; чушь="!@#$%^&*"; пока найти(стр,чушь)<>0 цикл чушь=чушь+чушь конецЦикла; новСтр=фиксшаблон("[стр#с"+(номер-1)+"]"); новСтр=сокрП(новСтр); пока стрДлина(новСтр)<номер-1 цикл новСтр=новСтр+" " конецЦикла; конец=стрЗаменить(чушь+стр,чушь+новСтр,""); новСтр=новСтр+символ+конец; сообщить(новСтр); Золушок на мысль натолкнул |
Тундра 138 - 03.10.2003 - 14:16 | (137)...чушь тихонько повизгивала!.... |
avb 139 - 03.10.2003 - 18:00 |
на правах апа: что извращенцы кончились? ;)) |
Хоха 140 - 03.10.2003 - 18:12 | Можно упаковать строку в какое-нибудь представление, сравнимое с системой символа который нужно подставить вместо. |
Harleq 141 - 03.10.2003 - 18:40 |
СтрокаВход="АБВГДЕЁЖЗ"; НомерСимволаЗамены=5; СимволЗамены="#"; Ёксель= СоздатьОбъект("Excel.Application"); СтрокаВыход=Ёксель.REPLACE(СтрокаВход,НомерСимволаЗамены,1,СимволЗамены); |
avb 142 - 03.10.2003 - 19:06 |
(140) кто извращённо мыслит, тот извращённо излагает? ;) (141) внешнее приложение, внешняя компонента - какая разница ... |
Тонни 143 - 03.10.2003 - 19:33 |
(0)а так строка = лев(до символа замены) + символ замены + прав(до символа замены) |
Igogo 144 - 06.10.2003 - 08:00 |
// А слабо вообще без функций обработки строк? Функция Замена(Стр,Номер,Символ) Перем Т,С,Длина,НовСтр,Дубль,Буквы; Буквы=СоздатьОбъект("СписокЗначений"); Для Т=1 По 255 Цикл Буквы.ДобавитьЗначение(Симв(Т)); КонецЦикла; Буквы.Сортировать(); Длина=СтрДлина(Стр); НовСтр=""; Дубль=""; Для Т=1 По Длина Цикл Для С=1 По 255 Цикл Если Дубль+Буквы.ПолучитьЗначение(С)>Стр Тогда Дубль=Дубль+Буквы.ПолучитьЗначение(С-1); Если Т=Номер Тогда НовСтр=НовСтр+Символ; Иначе НовСтр=НовСтр+Буквы.ПолучитьЗначение(С-1); КонецЕсли; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Возврат НовСтр; КонецФункции |
YAndrey 145 - 06.10.2003 - 08:10 | (144) Во первых СтрДлина - строковая функция, а во вторых это алгоритм abv, приведенного в начале обсуждения... |
YAndrey 146 - 06.10.2003 - 08:21 |
А я сейчас приведу самый правильный, программистский метод... Функция ВС(Строка, Позиция, Символ) ВвестиСтроку(Строка, "Замените "+Строка(Позиция)+"-й символ на "+Символ+"!!!"); Возврат Строка; ЗАЧОООТ!!! |
Тундра 147 - 06.10.2003 - 08:22 |
(145). И тот не работает: Стр1="Для замены символа!"; Стр= Замена(Стр1,5,"ю"); Сообщить(Стр); Выводит "ДЛ" |
Тундра 148 - 06.10.2003 - 08:25 | +147) Это я про метод в 144 |
Harleq 149 - 06.10.2003 - 10:56 |
142) Аппиляция! В ПРАВИЛАХ: "зачеты будут ставится только за решения, не использующие функции лев(), прав() и сред()" НИЧЕГО НЕ ГОВОРИТЬСЯ ПРО ВНЕШНЕЕ ПРИЛОЖЕНИЕ. |
avb 150 - 06.10.2003 - 11:00 |
(149) это ты не то посмотрел, тогда ещё халява не совсем кончилась :)) см. (61) "принимаются решения на языке 1сv77, не использующие вк, функции лев(), прав(), сред() и формат()" |
avv 151 - 06.10.2003 - 11:05 | Кто-нибудь что-нибудь знает о компании Программные системы развития (Украина, г. Киев). Конкретно интересует платформа MANAGER PDS. По итогам выставки... |
Wolflab 152 - 06.10.2003 - 11:07 | Таких извращенцев нельзя после двенадцати из дому выпускать. |
Harleq 153 - 06.10.2003 - 11:07 | Правила конкурса (лотереи) не меняют после начала конкурса (лотереи). |
avb 154 - 06.10.2003 - 11:11 |
(153) у нас, у извращенцев, всё ч/з ж0пу :)) к этому привыкнуть надо ;)) |
Harleq 155 - 06.10.2003 - 11:40 |
Процедура Замена(СтрВход,НомерЗамены=3,СимволЗамены="#") Для Ин=1 По 255 Цикл Если Симв(Ин)<>"¦" Тогда СтрВход=СтрЗаменить(СтрВход,Симв(Ин),Симв(Ин)+"¦"); КонецЕсли; КонецЦикла; СтрВход=СтрЗаменить(СтрВход,"¦",""","""); СтрВход=""""+СтрВход+""""; СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(СтрВход); СтрВыход=""; Для Ин=1 По СЗ.РазмерСписка()-1 Цикл Если Ин=НомерЗамены Тогда СтрВыход=СтрВыход+СимволЗамены; Иначе СтрВыход=СтрВыход+СЗ.ПолучитьЗначение(Ин); КонецЕсли; КонецЦикла; Сообщить(СтрВыход); КонецПроцедуры // ---------------- Маэстро, зацените! |
avb 156 - 06.10.2003 - 11:50 | (155) Замена("ABCDE"",""ABCDE"); :(( |
Harleq 157 - 06.10.2003 - 11:58 |
Процедура Замена(СтрВход,НомерЗамены=3,СимволЗамены="#") Для Ин=1 По 255 Цикл Если Симв(Ин)<>"¦" Тогда СтрВход=СтрЗаменить(СтрВход,Симв(Ин),Симв(Ин)+"¦"); КонецЕсли; КонецЦикла; Сообщить(СтрВход); СтрВход=СтрЗаменить(СтрВход,"""",""""""); СтрВход=СтрЗаменить(СтрВход,"¦",""","""); СтрВход=""""+СтрВход+""""; СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(СтрВход); СтрВыход=""; Для Ин=1 По СЗ.РазмерСписка()-1 Цикл Если Ин=НомерЗамены Тогда СтрВыход=СтрВыход+СимволЗамены; Иначе СтрВыход=СтрВыход+СЗ.ПолучитьЗначение(Ин); КонецЕсли; КонецЦикла; Сообщить(СтрВыход); КонецПроцедуры // ---------- Маэстро не отвертишься! |
avb 158 - 06.10.2003 - 12:05 |
(157) Замена("ABCDE¦ABCDE"); ну, ну... ещё чуть-чуть... ;)) |
Harleq 159 - 06.10.2003 - 12:06 |
Процедура Замена(СтрВход,НомерЗамены=3,СимволЗамены="#") Для Ин=1 По 255 Цикл Если Симв(Ин)<>"¦" Тогда СтрВход=СтрЗаменить(СтрВход,Симв(Ин),Симв(Ин)+"¦"); КонецЕсли; КонецЦикла; СтрВход=СтрЗаменить(СтрВход,"""",""""""); СтрВход=СтрЗаменить(СтрВход,"¦",""","""); СтрВход=""""+СтрВход+""""; СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(СтрВход); СтрВыход=""; Для Ин=1 По СЗ.РазмерСписка()-1 Цикл Если Ин=НомерЗамены Тогда СтрВыход=СтрВыход+СимволЗамены; Иначе СтрВыход=СтрВыход+СЗ.ПолучитьЗначение(Ин); КонецЕсли; КонецЦикла; Сообщить(СтрВыход); КонецПроцедуры // ------------ Лишнее сообщение было |
Harleq 160 - 06.10.2003 - 12:10 |
Процедура Замена(СтрВход,НомерЗамены=3,СимволЗамены="#") Для Ин=1 По 255 Цикл Если Симв(Ин)<>"•" Тогда СтрВход=СтрЗаменить(СтрВход,Симв(Ин),Симв(Ин)+"•"); КонецЕсли; КонецЦикла; СтрВход=СтрЗаменить(СтрВход,"""",""""""); СтрВход=СтрЗаменить(СтрВход,"•",""","""); СтрВход=""""+СтрВход+""""; СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(СтрВход); СтрВыход=""; Для Ин=1 По СЗ.РазмерСписка()-1 Цикл Если Ин=НомерЗамены Тогда СтрВыход=СтрВыход+СимволЗамены; Иначе СтрВыход=СтрВыход+СЗ.ПолучитьЗначение(Ин); КонецЕсли; КонецЦикла; Сообщить(СтрВыход); КонецПроцедуры // ---------- Расцениваю это как придирки. |
avb 161 - 06.10.2003 - 12:13 |
(160) считай, что взял измором ;)) зачёт! |
Harleq 162 - 06.10.2003 - 12:18 |
161) Ну, давно бы так.;) Чуть не засудили.;) Заметьте, не использовалась даже СТРДЛИНА(). |
GluK 163 - 06.10.2003 - 12:45 |
//прошу рассмотреть Функция Замена(Стр,Номер,Символ) НовСтр=""; ВремСтрока=""; Для й=1 По СтрДлина(Стр) Цикл Для ц=1 По 255 Цикл ТекСимвол=Симв(ц); СтрокаПоиска=ВремСтрока+ТекСимвол; Если Найти(Стр,СтрокаПоиска) =1 Тогда Если й=Номер Тогда НовСтр=НовСтр+Символ; Иначе НовСтр=НовСтр+ТекСимвол; КонецЕсли; ВремСтрока=ВремСтрока+Символ; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Возврат НовСтр; КонецФункции |
GluK 164 - 06.10.2003 - 12:48 |
//ошибки Функция Замена(Стр,Номер,Символ) НовСтр=""; ВремСтрока=""; Для й=1 По СтрДлина(Стр) Цикл Для ц=1 По 255 Цикл ТекСимвол=Симв(ц); СтрокаПоиска=ВремСтрока+ТекСимвол; Если Найти(Стр,СтрокаПоиска) =1 Тогда Если й=Номер Тогда НовСтр=НовСтр+Символ; Иначе НовСтр=НовСтр+ТекСимвол; КонецЕсли; ВремСтрока=ВремСтрока+ТекСимвол; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Возврат НовСтр; КонецФункции |
Тундра 165 - 06.10.2003 - 12:59 | (164)Теперь ОК. |
avb 166 - 06.10.2003 - 12:59 | (164) молоток! зачёт! :)) |