Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Снова привет и приветственный поклон) Я наступил на грабли и незнаю что с этим делать. Я занялся программой для генерации алгоритмов шифрования (пока что подстановочных) и собсно их использования. И я столкнулся спроблемой: Для зашифрования строки мне нужно разобрать ее на буковки, и каждой букве я присваиваю свой код по таблице, и это дело записывается в одну строку. Проблема состоит в том что в случае попадания одинаковых букв в разных местах они какогото */*/* сортируются! К примеру входная строка TEST по буквам понятно T E S T допустим буквам присвоен код T=000 E=111 S=222 Так вот по идее у нас должно быть 000111222000 Но сценарий стакует последнюю повторяющуюся букву после первой и у меня на выходе 000000111222 T T E S Спрашивается где косяк у НБ или у меня? Я то понимаю что выполняется то что напишет программист но тут чтото нетак, взгляните на сценарий:
Код
.меряем длинну входной строки StrLen "[deco_output]" "[encd_length]" .задаем значение отсчета SetVar "[encd_strt]" "0" .цикл от одного до длинны символов<------ПРОБЛЕМА Loop "1" "[encd_length]" "[encd_cou]" .копируем один символ из входной строки и помещаем в динамическую переменнную SubStr "[deco_output]" "[encd_strt]" "1" "[encd_char_[encd_cou]]" .приплюсовуем счетчик для чтения сл. символа Math "[encd_strt]+1" "0" "[encd_strt]" .конец цикла EndLoop .начинаем цикл с одного до кол-ва символов в входной строке Loop "1" "[encd_length]" "[encd_cou]" .читаем из файла соотвествие кода символу hpwIniRead "[prfl_file]" "chars_code" "[encd_char_[encd_cou]]" "[err]" "[encd_cd_[encd_cou]]" .записываем текузее содержимое в запасную переменную SetVar "[deco_subencode]" "[deco_encode]" .прибавляем к основной переменнной запасную строку и новые значения SetVar "[deco_encode]" "[deco_subencode][encd_cd_[encd_cou]]" .конец цикла EndLoop
В ini файле прописаны соответствия буква-код типа A=856 и так далее По идее начиначя с loop с меткой "проблема" мы копируем буквы с нулевой позиции (это мы задали в
Код
Math "[encd_strt]+1" "0" "[encd_strt]"
комманде) и потом в
Код
Math "[encd_strt]+1" "0" "[encd_strt]"
Прибавляем уровень с которого мы посимвольно копируем строку в случае с TEST следующая буква на позиции 1 это E но он копирует T которая последняя Помогите а? I will alive before dead
Сообщение отредактировано UserDead - Сб, 15 Февраля 2014, 21:13
SetVar "[encd_strt]" "0" .цикл от одного до длинны символов<------ПРОБЛЕМА Loop "1" "[encd_length]" "[encd_cou]" .копируем один символ из входной строки и помещаем в динамическую переменнную SubStr "[deco_output]" "[encd_strt]" "1" "[encd_char_[encd_cou]]" .приплюсовуем счетчик для чтения сл. символа Math "[encd_strt]+1" "0" "[encd_strt]" .конец цикла EndLoop
Команда SubStr начинает отсчет позиций копирования с первого символа, а не с нуля, т.е. если нужно скопировать один символ с позиции первого символа, то должно быть SubStr "[deco_output]" "1" "1" "[encd_char_[encd_cou]]"
с позиции пятого символа от начала строки: SubStr "[deco_output]" "5" "1" "[encd_char_[encd_cou]]" и т.д.
А вот команда плагина hpwIniRead может начинать отсчет и с нуля, т.к. в Delphi все отсчеты начинаются с нуля, а, насколько мне извкестно, HPW (автор плагина) не утруждался приведением "систем отсчета" плагинов к стилю NB, и делал все по образу и подобию Delphi.
А вообще, в случаях, когда возникают непонятки с содержимым перменнных (и не только), рекомендуется пользоваться отладчиком и выполнять сценарий пошагово, контролируя выполнение каждой команды и содержимое переменных. Тогда все будет как на ладони. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Спасибо огромное Peter! Вот где собака зарылась) Мне казалось что отсчет идет с нуля когда ранее сталкивался с подобным, тоесть я думал что нулевая позиция это самое начало строки перед первым символом, вот когдато я сделал этот вывод и тут об него споткнулся. ------------ А вот hpwIniRead нужен только для считывания соответствия буква-соответствующий код. Поправил стартовое значение на 1 и все заработало как надо.. Вот я тюфяк хоть бы догадался попробовать -__- Еще раз благодарю! I will alive before dead