К списку форумов К списку вопросов
Я туплю. Как изменить тртью букву в строке?
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) молоток! зачёт! :))

К списку вопросов на форуме 1C

>>
Hosted by uCoz