|
Обратное отражение символов в строке | ☑ | ||
---|---|---|---|---|
0
makMich
22.03.23
✎
16:58
|
Добрый день!
Обычное приложение. Во внешней обработке есть табличная часть. В ней колонка под названием "значение". Это строка из рандомных символов. Необходима процедура, которая бы отражала символы в ячейках в обратном порядке. т.е. было: | 1 | qwer | | 2 | asdf | | 3 | zxcv | стало: | 1 | rewq | | 2 | fdsa | | 3 | vcxz | Пробовал найти какие-то встроенные методы, но ничего не нашел. 1С только начал изучать, поэтому может не вижу какого то очевидного решения?! Спасибо за помощь! |
|||
1
Aleksey
20.03.23
✎
20:14
|
нет очевидных решений нет. 1С как бы не про перестановку местами символов в строке
https://www.cyberforum.ru/1c-custom/thread1545918.html |
|||
2
Волшебник
20.03.23
✎
20:16
|
||||
3
magicSan
20.03.23
✎
20:22
|
(0) откуда такие задачи в 1С?
|
|||
4
Волшебник
20.03.23
✎
20:23
|
(3) Очевидно, с собеседования
|
|||
5
magicSan
20.03.23
✎
20:25
|
(4) Откуда такие задачи на собеседование?
|
|||
6
Волшебник
20.03.23
✎
20:30
|
(5) Когда я проводил собеседования, я задавал вопросы про флаг "основной отбор" для измерения регистра сведений. По сравнению с моим вопросом, решить сабж очень легко. Простая алгоритмическая задача, которую легко загуглить и решить на всех языках программирования.
|
|||
7
magicSan
20.03.23
✎
20:37
|
(6) Он же не быдло кодером устраиваться. То что легко согласен. Но вот вспоминается мне вопросы типа "пронумеровать результат запроса" - пока до дома ехал придумал, но за час не смог учитывая что были другие задачи. Или цена валюты на каждый день учитывая что в какой-то день цены могло не быть. - это не типовые высосанные непонятно из каких мест задачи.
У основного отбора, если не изменят память при удалении, при удаление элемента удалится запись регистра. - нормальный вопрос на знание платформы. (если я конечно правильно вспомнил) |
|||
8
magicSan
20.03.23
✎
20:39
|
"
Ведущее — свойство измерения, подразумевающее под собой информацию о том, что без значения этого измерения запись регистра не имеет смысл. На деле это означает что система при удалении значения из измерения удаляет еще и запись регистра с «Ведущим» измерением. Может быть установлено только одно измерение. Основной отбор — если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование Основной отбор по периоду включает основной отбор для период для периодических регистров. " Я был рядом )))) |
|||
9
Chameleon1980
20.03.23
✎
20:52
|
(8) еще кое-что есть для ведущего измерения
|
|||
10
Волшебник
20.03.23
✎
22:05
|
(8) я не спрашивал про "Ведущее"
|
|||
11
lexushka
21.03.23
✎
06:24
|
(6-8) Собеседование это конечно святое, но в своей работе с типовыми конфигурациями вы часто "дергали" эти настройки, вон в (7) реальный уровень — что-то там такое есть, но надо будет — уточним Помнить все по платформе где типа значения в коде ТипЗнч() а в запросе ТипЗначения() по моему мнению нереально — оно нелогична-с
|
|||
12
2S
21.03.23
✎
06:26
|
(0) напиши рекурсивную функцию, тест пройдешь
|
|||
13
lexushka
21.03.23
✎
06:27
|
а в расширении #Удаление/#КонецУдаления и держищь себя в руках чтобы не написать #Удалить и не забыть что не КонецЕсли, те КонецУдалить а КонецУдаления...
|
|||
14
DJ Anthon
21.03.23
✎
06:28
|
(8) а можете сказать, почему только может быть ведущим? какая в этом логика и технические трудности сделать их несколько?
|
|||
15
DJ Anthon
21.03.23
✎
06:29
|
* только одно
|
|||
16
lexushka
21.03.23
✎
06:32
|
(15) какой бардак случится если записи будут удалять сразу несколько измерений Как решать коллизию?
|
|||
17
DJ Anthon
21.03.23
✎
06:34
|
(16) не понял, в чем бардак. записи удалятся. допустим, есть измерение организация и номенклатура. что я удаляю организацию, что я удаляю номенклатуру - запись все равно удалится. это мне и нужно. она и нужна только если существует и то, и другое. а так удаление номенклатуры или организации остановится, потому что сначала надо вычистить мои регистры ручками.
|
|||
18
lexushka
21.03.23
✎
06:36
|
(17) полагаю слишком сложно
нет человека - нет проблемы… |
|||
19
lexushka
21.03.23
✎
06:43
|
Что до задачи — надо обратить внимание что спереди цифры в черточках и их переворачивать не надо
|
|||
20
Serg_1960
22.03.23
✎
16:58
|
Не оптимально, но лаконично :)
Сообщить(Зеркало("А роза упала на лапу Азора")); // "арозА упал ан алапу азор А" Функция Зеркало(ИсхСтрока, Знач х = 1) Возврат ?(х > СтрДлина(ИсхСтрока), "", Зеркало(ИсхСтрока, х+1) + Сред(ИсхСтрока, х, 1)); КонецФункции |
|||
21
Волшебник
21.03.23
✎
10:41
|
(14) Ведущих измерений может быть много. В (8) ошибка.
|
|||
22
Garykom
гуру
21.03.23
✎
10:44
|
(21) там не в (8) ошибка а в днк
|
|||
23
Garykom
гуру
21.03.23
✎
10:47
|
(6) >флаг "основной отбор" для измерения регистра сведений
фактически это составной ключ для таблицы |
|||
24
Волшебник
21.03.23
✎
10:50
|
(23) Только для другой таблицы
|
|||
25
Garykom
гуру
21.03.23
✎
10:54
|
(20) Это не просто не оптимально а грубейшая ошибка или как минимум неоптимальное решение
Если длина строки ограничена то неоптимальное, если про максимальные длины строк ничего не известно - ошибка "Однако нужно избегать использования рекурсивного вызова и для алгоритмов, в которых реальная вложенность рекурсии будет достигать сотен уровней. Во встроенном языке не установлено конкретного ограничения количества уровней рекурсивного вызова. Ограничение носит технологический характер. Аварийное завершение работы системы будет происходить, после того, как будут исчерпаны свободные ресурсы, используемые при рекурсии. Рекомендуется создавать алгоритмы, количество уровней рекурсии в которых будет на практике ограничиваться несколькими десятками." |
|||
26
НафНаф
21.03.23
✎
11:01
|
во как можно в ms sql:
select REVERSE(t.f) from (select N'фыва' as f) as t |
|||
27
Serg_1960
21.03.23
✎
11:02
|
По поводу (6)
А сегодня в ИТС не все могут смотреть. Вернее смотреть могут не только лишь все, мало кто может это делать :))) ...Особое внимание следует уделить регистрам сведений, имеющим независимый режим записи (свойство "Режим записи" установлено в значение "Независимый"). Для данных регистров гранулой обмена является набор записей с отбором по измерениям, c установленным свойством "Основной отбор"... Источник: ИТС, "Подготовка конфигурации к работе в распределенной информационной базе" - https://its.1c.ru/db/metod8dev/content/2266/hdoc |
|||
28
makMich
21.03.23
✎
11:39
|
Спасибо всем. Основная проблема была не в отзеркаливании строки, а в записи в таблицу. Не сразу разобрался, что из табличной части нужно выгрузить данные в таблицу значений и уже в ней производить изменения, а потом загрузить измененное обратно.
|
|||
29
Serg_1960
21.03.23
✎
11:42
|
По поводу (25)
С теоретической частью рассуждений разумеется согласен. Но, однако, хочу обратить Ваше внимание на следующие обстоятельство: автор темы указал пример исходных данных. Учитывая это, моё решение всего лишь неоптимально (но допустимо). О чём я сразу же и предупредил в (20) PS: ну, да, времена я тот ещё зануда :) |
|||
30
Garykom
гуру
21.03.23
✎
11:56
|
(29) цикл проще
|
|||
31
Garykom
гуру
21.03.23
✎
11:56
|
(30)+ явный цикл, проще и понятней
в отличие от неявного через рекурсию |
|||
32
Garykom
гуру
21.03.23
✎
11:59
|
|
|||
33
Garykom
гуру
21.03.23
✎
12:09
|
Кстати кто знает почему вот такой код (32) в Java и C# скажут НЕОПТИМАЛЬНО?
|
|||
34
Garykom
гуру
21.03.23
✎
12:10
|
(33)+ речь не про встроенные функции переворачивания типа reverse()
|
|||
35
Волшебник
21.03.23
✎
12:11
|
(33) Потому что наращивание строки по символам приводит к копированию всей строки. Нужно использовать StringBuilder
|
|||
36
magicSan
21.03.23
✎
12:21
|
(35) нет, на каждой итерации ты добавляешь в заранее выделенную область памяти 1 байт.
|
|||
37
Garykom
гуру
21.03.23
✎
12:22
|
(35) ага
|
|||
38
Garykom
гуру
21.03.23
✎
12:22
|
(37)+ причем не просто наращивание а слева
|
|||
39
Волшебник
21.03.23
✎
12:27
|
(36) Ну во-первых не 1, а 2, потому что строки в юникоде. А во-вторых тип String относится к immutable-типам, он не модифицируется. Присвоение строке символа приводит к созданию новой строки.
|
|||
40
magicSan
21.03.23
✎
12:37
|
(39) да, читанул, мыслю в рамках си++.
|
|||
41
lodger
22.03.23
✎
16:57
|
тогда так?
ИсхСтрока = "абв"; Промежуток = Новый Массив; ДлинаСтроки = СтрДлина(ИсхСтрока); Для НомерСимвола = 1 По ДлинаСтроки Цикл Промежуток.Добавить(Сред(ИсхСтрока, 1+ДлинаСтроки-НомерСимвола, 1)); КонецЦикла; РезСтрока = СтрСоединить(Промежуток,""); |
|||
42
Волшебник
21.03.23
✎
12:53
|
(41) Сделайте замер производительности на строке в миллион символов. Вряд ли там будет какое-то ускорение
|
|||
43
lodger
21.03.23
✎
13:27
|
(42) почему сразу "вряд ли"? кратный перевес.
http://paste1c.ru/2ske0nihhq7o https://postimg.cc/NKSGnMZb |
|||
44
Волшебник
21.03.23
✎
13:37
|
(43) Хм... Понятно, спасибо.
|
|||
45
lodger
21.03.23
✎
14:06
|
+(43) если инициализировать массив сразу известным размером новый массив(ДлинаСтроки);
а значения вбрасывать методом .Установить(), то рядом с "РезСтрока = "" + Сред(ИсхСтрока, НомерСимвола, 1) + РезСтрока;" разницы вообще не видно. возможно она есть, но там какие то проценты по пальцам рук пересчитать. |
|||
46
magicSan
21.03.23
✎
14:08
|
(45) чот у тебя на вызове кувырков - показывает что через голову отнял ...7% на замере видно другое, интересно через потоки на скока быстрее будет - там встроенная фича по инверсии есть.
|
|||
47
lodger
21.03.23
✎
14:11
|
(46) не 7%, а 0.07%.
потому что переменную для результата не создавал внутри (чтобы обратно отдать поинтер), а передал непосредственно данные. |
|||
48
Garykom
гуру
21.03.23
✎
14:14
|
(43) как с этой пасты скопипастить код?
|
|||
49
Garykom
гуру
21.03.23
✎
14:14
|
(48)+ и вопрос нахрен она нужна если код нельзя скопировать?
|
|||
50
Garykom
гуру
21.03.23
✎
14:15
|
(49)+ регаться точно не собираюсь
|
|||
51
Волшебник
21.03.23
✎
14:15
|
(48) Ctrl-A, Ctrl-C
|
|||
52
Garykom
гуру
21.03.23
✎
14:15
|
(51) не работает
|
|||
53
lodger
21.03.23
✎
14:15
|
(52) работает
|
|||
54
Garykom
гуру
21.03.23
✎
14:16
|
(52) (53) да получилось со второй попытки
|
|||
55
Волшебник
21.03.23
✎
14:19
|
И эти люди автоматизируют страну...
|
|||
56
Garykom
гуру
22.03.23
✎
16:57
|
эээ сколько надо символов лопатить чтобы хотя бы секунду заняло любым методом?
у меня уже Гигастрока = "начало"+СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов("у", 10000000000000000000000000); и один фиг оба в пределах секунды |
|||
57
Волшебник
21.03.23
✎
14:23
|
(56) Внутри цикла добавь запрос к регистру бухгалтерии
|
|||
58
Garykom
гуру
21.03.23
✎
14:25
|
(57) ыыы
|
|||
59
magicSan
21.03.23
✎
14:31
|
(57) ахахахахаха
|
|||
60
НафНаф
22.03.23
✎
13:03
|
(56) извините, но я вам не верю, что в пределах секунды
|
|||
61
Garykom
гуру
22.03.23
✎
14:09
|
(60) i9-13900kf
|
|||
62
Garykom
гуру
22.03.23
✎
14:11
|
(60) я тоже подумал что странно
проверил даже что в функции заполнения нет ограничения на длину числа числа в 1С 32 знака целой части |
|||
63
magicSan
22.03.23
✎
14:23
|
(61) 3 герца, не сильно быстрый у меня изначально тупить начало на генерации строки пришлось число уменьшать. Тоже не верю.
|
|||
64
magicSan
22.03.23
✎
14:25
|
(63) а турбо буст до 6.3? 0о кхм кхм нефига себе, но всё равно не верю.
|
|||
65
Garykom
гуру
22.03.23
✎
14:54
|
(60) (63) правильно не верите
речь про кривой код из (43) там бага с реквизитом формы получается |
|||
66
Garykom
гуру
22.03.23
✎
15:00
|
||||
67
lodger
22.03.23
✎
15:12
|
(65) так, а в чем баг? интересна ж.
|
|||
68
Garykom
гуру
22.03.23
✎
15:22
|
(67) сам то попробуй
не в реквизит формы а в переменную делать СформироватьСтрокуСимволов()
|
|||
69
Asmody
22.03.23
✎
15:40
|
(0) миста помогает https://1cers.ru/strrev?переверни%20строку
|
|||
70
Волшебник
22.03.23
✎
15:48
|
(69) Алгоритм этого функционала, пожалуйста, впиши в статью Книга знаний: Перевернуть строку на разных языках программирования
|
|||
71
НафНаф
22.03.23
✎
15:52
|
(66) 2 и 24 секунды
|
|||
72
Garykom
гуру
22.03.23
✎
16:07
|
(71) там очень странно
да почему то второй способ выдает иногда разное время |
|||
73
Garykom
гуру
22.03.23
✎
16:09
|
(71) угу 2 и 24 секунды это я опечатался
но суть что при нескольких запусках там разное время от 16 до 30 секунд выходило |
|||
74
Garykom
гуру
22.03.23
✎
16:21
|
Переделал
|
|||
75
Garykom
гуру
22.03.23
✎
16:21
|
||||
76
Garykom
гуру
22.03.23
✎
16:24
|
СтрСоединить() реально шустро пашет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |