Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2012, 00:45   #1
hauk70
Пользователь
 
Регистрация: 06.05.2012
Сообщений: 22
Вопрос Delphi передача текста из memo в memo

На форме есть 2 мемо. В 1 мемо вводим текст, нажимаем на волшебную кнопку, текст шифруется (а данном случаем пока он просто переводится в свой числовой код) и передается в мемо2. Проблема такова что текст может быть длинным и я создал массив строк для хранения всего текста (с динамическими массивами я работать не умею, так что пределы заданы) Есть вопрос - в чем ошибка?
Проект компилируется, но при нажатии на кнопку начинает плеваться.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
s1:string;
a:array[1..256] of integer;
strings:array[1..2048] of string;   
z,i,j,dlin:integer;
begin
dlin:=length(memo1.Text);
i:=1;
j:=1;
z:=1;
{==========================================}
while z<=dlin do
begin
  while length(strings[i])<=256 do
   begin
   strings[i][j]:=memo1.Lines.text[z];
   j:=j+1;
   z:=z+1;
   end;
i:=i+1;
j:=1;
end;
{==========================================}
j:=1;
z:=1;
while z<= dlin do
  begin
  i:=1;
  s1:='';
    while length(strings[j])<=256 do
    begin
    a[i]:=ord(strings[j][i]);
    i:=i+1;
    z:=z+1;
    s1:=s1+inttostr(a[i]);
    end;
  j:=j+1;
  memo2.text:=memo2.Text+s1;
  end;

end;
hauk70 вне форума Ответить с цитированием
Старый 09.05.2012, 00:54   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Используй класс TStringList, или чё там у компонента ListBox имеется, и работай с ним.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 09.05.2012, 00:59   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Зачем создавать массив строк, если мемо отлично справится с хранением достаточного объема данных?
В будущем, можно будет перейти на tstringlist.
перед отправкой поста жать ф5, перед отправкой поста жать ф5...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i:int64;
begin
s:='';
memo2.clear;
for i:=1 to length(memo1.Text) do
  s:=s+inttostr(ord(memo1.text[i]));
memo2.text:=s;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.05.2012 в 01:03.
BDA вне форума Ответить с цитированием
Старый 09.05.2012, 14:31   #4
hauk70
Пользователь
 
Регистрация: 06.05.2012
Сообщений: 22
По умолчанию

BDA, я делал так с самого начала и он переводил текст в числа нормально, но когда текста становилось больше он мне выводил что-то вроде
Код:
1000000000000000000000000
да и как я думал, строка может содержать в себе только 256 символов О_о объясните пожалуйста, я перестал все это понимать, как строковая переменная может содержать в себе более 256 символов О_о
и еще делфи ругался на i в
Код:
for i:=1 to length(memo1.Text) do
А так ваш код работает на ура, я перемудрил что-то =)
hauk70 вне форума Ответить с цитированием
Старый 09.05.2012, 14:47   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

http://programmersforum.ru/showpost....35&postcount=6 - это насчет длины строки.
Код:
var
  s:string;
  i:cardinal;
begin
s:='';
memo2.clear;
for i:=1 to length(memo1.Text) do
  s:=s+inttostr(ord(memo1.text[i]));
memo2.text:=s;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.05.2012, 21:58   #6
hauk70
Пользователь
 
Регистрация: 06.05.2012
Сообщений: 22
По умолчанию

Итак, благодаря вашей помощи написал таки шифратор текста, но проблема в том что зашифрованный текст не возвращается в своем первоначальном виде, причем он возвращается только в виде квадратиков, логику проверял не один раз, все сходится Это моя курсовая, а так как я хочу 5 вопросов будет еще много Помогите плз.

Вот код шифрования
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  st:string;
  i:cardinal;
  statr,dynr:integer;
begin
st:='';
memo2.clear;
statr:=random(300)+80;
st:=chr(statr);
for i:=1 to length(memo1.Text) do
begin
dynr:=random(300)+60;
st:=st+chr(dynr)+chr(ord(memo1.text[i])+dynr+statr);
end;
memo2.text:=st;
end;

А вот дешифровка
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i,z,d:cardinal;
  st,a,res:string;
  statr,dynr:integer;
begin
i:=2; d:=1;
statr:=ord(memo2.Text[1]);
  while i<=length(memo2.text) do
  begin
  dynr:=ord(memo2.Text[i]);
  i:=i+1;
  a:=memo2.Text[i];
  i:=i+1;
  st:=st+chr(ord(a)-statr-dynr);
  end;
memo1.text:=st;
end;
hauk70 вне форума Ответить с цитированием
Старый 09.05.2012, 22:03   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Во-первых, если расчет идет на ansi, то коды символов лежат в диапазоне от 0 до 255.
Во-вторых, объясните смысл шифрования?
Что за statr,dynr? Напишите словами, что должно происходить.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.05.2012, 22:32   #8
hauk70
Пользователь
 
Регистрация: 06.05.2012
Сообщений: 22
По умолчанию

statr это статический рандом, на это число будут сдвинуты все символы.
dynr это динамический рандом, на это число будет сдвинут каждый символ. Ну а динамический потому что каждый раз, оно будет разным, а именно числовой код каждого символа будет изменен на общее статическое число и для каждого элемента на свое динамическое. Принцип дешифровки заключается в том что он берет первый символ как statr(как мы и помещали при шифровании), каждый раз с периодичностью берет dynr(число на которое был сдвинут каждый символ) и сам код символа. Отнимает от статический рандом, динамический рандом и должен выйти наш символ.

Последний раз редактировалось hauk70; 09.05.2012 в 22:46.
hauk70 вне форума Ответить с цитированием
Старый 09.05.2012, 23:44   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Все получилось гораздо сложнее. С кучей проверок, пропуском непечатных символов и костылем для обхода сочетания #13#10 (переход на новую строку).
Вложения
Тип файла: zip Project1.zip (219.0 Кб, 17 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.05.2012, 00:19   #10
hauk70
Пользователь
 
Регистрация: 06.05.2012
Сообщений: 22
По умолчанию

BDA, за код спасибо, буду пытаться его понять, но там есть проблема, русский текст он шифрует криво, например если написать
"привет вася" получим что-то вроде "¿Приветì*вася"
а при дешифровке получаем "риветì ася"

как хорошо что мне сдавать проект через 2 недели, можно еще мучатся и мучатся =)
hauk70 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка текста Memo fineleave Помощь студентам 4 11.06.2011 21:48
memo атрибут текста grom333 Помощь студентам 10 21.03.2010 20:34
Memo - обробка текста sv2311 Помощь студентам 0 25.04.2009 17:42
Вставка текста в memo Revan Общие вопросы Delphi 2 23.05.2008 17:45
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40