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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 16:49   #1
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию Memo имеет текст который нужно вывести здесь же в обратном направлении

Добрый день.

У меня есть текст в Memo (любой, с абзацами). Нужно вывести здесь же все в обратном направлении. Метод AnsiReverseString компилятору неизвестен.
Valera вне форума Ответить с цитированием
Старый 28.03.2011, 17:01   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var s, s1: string; i: Integer;
begin
  s := Memo1.Text;
  s1 := '';
  for i := Length(s) downto 0 do
  if s[i]<> #13 then
  s1 := s1 + s[i];
  Memo2.Lines.Text:= s1;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.03.2011, 17:04   #3
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Только сделайте for i := Length(s) downto 1 do
ReportCube вне форума Ответить с цитированием
Старый 28.03.2011, 17:09   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так абзацы потеряются.
Код:
Вместо 
if s[i]<> #13 then  s1 := s1 + s[i];

просто
s1 := s1 + s[i];
Перевод строки, который возможен в конце исходного текста в Memo при этом вылезит в начало
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.03.2011, 17:09   #5
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Спасибо.
А функции нет?
Valera вне форума Ответить с цитированием
Старый 28.03.2011, 17:14   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Так абзацы потеряются
По логике да. Я сам не понял в чем причина. Сразу машинально написал просто
s1 := s1 + s[i];
Получился между абзацами двойной перевод строки. Тогда дописал
if s[i]<> #13 then
Все заработало нормально. Что за хрень?
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.03.2011, 17:16   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Возможно там кроме #13 еще и #10 есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.03.2011, 17:16   #8
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var s, s1: string; i: Integer;
begin
  s := Memo1.Text;
  s1 := '';
  for i := Length(s) downto 0 do
  if s[i]<> #13 then
  s1 := s1 + s[i];
  Memo2.Lines.Text:= s1;
end;
Проверил. При нажатии кнопки нулевая строка не заполняется
Valera вне форума Ответить с цитированием
Старый 28.03.2011, 17:43   #9
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Так уберите лишние переводы строк, если они не требуются, обычной функцией Trim()
ReportCube вне форума Ответить с цитированием
Старый 28.03.2011, 17:54   #10
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Можно сделать и так:
1. Ищем любой символ, кроме #0, которого нет в TMemo, и запоминаем его
2. Заменяем все #$D#$A на этот символ
3. Запускаем предложенную Вам функцию реверса
4. Заменяем все вхождения нашего символа на #$D#$A
5. Смотрим результат...
ReportCube вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код ассемблер который имеет фунцию команды "dir"(MS-DOS) anonim90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.12.2010 19:27
Создание собственного класса. Который считает время(нужен секундамер) и имеет массив данных int ciberlex404 Общие вопросы C/C++ 0 04.06.2010 20:12
Найти студента который имеет среднее количество пропусков. LUKICH Фриланс 1 01.06.2010 09:15
Вывести числа в обратном порядке asmcc Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 20.02.2010 11:46
Народ как загрузить текст в Memo из готового фала, который указан в ListBox?) OPF_Nik Общие вопросы Delphi 7 09.11.2009 23:13