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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 20:19   #1
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию Посимвольное сравнение двух Memo

Мне нужно сравнить 2 Memo на предмет наличия в них различий и подсчёта количества этих различий (под различиями я имею в виду отличаюиеся символы разумеется). Пока что написал такой вот вариант, но не проверял его на рабоспобность (т. е. не компилировал):
Код:
function MyFunc:integer;
var i:integer;
for i:=1 to Memo1.Lines.Count-1 do
begin
if Memo1.Lines[i]<>Memo2.Lines[i] then
i:=i+1;
Result:=i;
Не понимаю, как именно написать именно посимвольное сравнение - ведь тот пример, что я написал он идёт по строкам. Или возможно мне надо сохранить два Memo в текстовые файлы и уже их сравнивать, но тоже не знаю как. Поэтому прошу помощи =)
iKarma вне форума Ответить с цитированием
Старый 20.10.2011, 20:44   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Memo.Lines.Text - вся строка текста в Memo. Вот и сравнивайте по-символьно. Не понятен сам критерий сравнения - если позиционное сранение символов, то нет проблем. В противном случает - наверно их будет масса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.10.2011, 21:08   #3
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию

то есть если я верно понял, то
Код:
function MyFunc:integer;
var i:integer;
for i:=1 to Memo1.Lines.Count-1 do
begin
if Memo1.Lines.Text[i]<>Memo2.Lines.Text[i] then
i:=i+1;
Result:=i;
iKarma вне форума Ответить с цитированием
Старый 20.10.2011, 21:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А кто писал, что Memo1.Lines.Text - массив? Это строка со всем содержимым Memo. И длина ее Length(Memo1.Lines.Text)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.10.2011 в 21:19.
Аватар вне форума Ответить с цитированием
Старый 20.10.2011, 21:20   #5
akaKolay
 
Аватар для akaKolay
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

попробуй так:

Код:
function Memo1Memo2(Memo1,Memo2:TMemo):integer;
var q1,q2,s1,s2:string;
    i,x,k:integer;
begin
q1:=''; q2:='';
for i:=0 to memo1.Lines.Count-1 do
 begin
  s1:=memo1.Lines[i];
  s2:=memo2.Lines[i];
  q1:=q1+s1;
  q2:=q2+s2;
 end;
x:=length(q1);
for i:=0 to x do
 if q1[i]<>q2[i] then k:=k+1;
Memo1Memo2:=k;
end;
а по нажатию кнопки пишешь:
Код:
 edit1.Text:=IntToStr(Memo1memo2(memo1,memo2));
21:28
еще насчет x во втором цикле он определяет длину только первой строки, но вторая может быть длиннее по этому лучше написать так чтобы он проверял длину и q1 и q2, а большее уже использовал в цикле

Бегом читать правила раздела, иначе я за себя не ручаюсь...
Уже 2 (условных пока) нарушения - неправильное оформление кода и флуд!
Модератор

Последний раз редактировалось akaKolay; 20.10.2011 в 23:40.
akaKolay вне форума Ответить с цитированием
Старый 21.10.2011, 10:04   #6
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию

akaKolay, я так понимаю так нужно?
Код:
function Memo1Memo2(Memo1,Memo2:TMemo):integer;
var
  q1,q2,s1,s2:string;
  i,x1,x2,k:integer;
begin
  q1:='';
  q2:='';
  for i:=0 to memo1.Lines.Count-1 do
    begin
      s1:=memo1.Lines[i];
      s2:=memo2.Lines[i];
      q1:=q1+s1;
      q2:=q2+s2;
    end;
  x1:=length(q1);
  x2:=length(q2);
  if x1>x2 then
    begin
      for i:=0 to x1 do
        if q1[i]<>q2[i] then
          k:=k+1;
    end
  else
    begin
      for i:=0 to x2 do
        if q1[i]<>q2[i] then
          k:=k+1;
    end;
  Memo1Memo2:=k;
end;
А возможно ли дописать данный алгоритм для работы с учётом пробелов, то есть текст бы сравнивался от пробела до пробела, то есть сравнивались бы слова в тексте на предмет различий?

Последний раз редактировалось iKarma; 21.10.2011 в 10:33.
iKarma вне форума Ответить с цитированием
Старый 21.10.2011, 13:11   #7
akaKolay
 
Аватар для akaKolay
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

можно написать как ты написал, но можно еще так:
Код:
if length(q1)>length(q2) then x:=length(q1) else x:=length(q2);
так код меньше места занимает, а что насчет сравнивать слова в тексте, я не совсем тебя понял. Ты хочешь чтобы он брал так сказать первых слова и их сравнил, потом следующие два слова, которые находятся через пробел ну и т.д.?

Последний раз редактировалось akaKolay; 21.10.2011 в 13:31.
akaKolay вне форума Ответить с цитированием
Старый 21.10.2011, 13:59   #8
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию

Цитата:
Сообщение от akaKolay Посмотреть сообщение
можно написать как ты написал, но можно еще так:
Код:
if length(q1)>length(q2) then x:=length(q1) else x:=length(q2);
так код меньше места занимает, а что насчет сравнивать слова в тексте, я не совсем тебя понял. Ты хочешь чтобы он брал так сказать первых слова и их сравнил, потом следующие два слова, которые находятся через пробел ну и т.д.?
Да, первое слово из первого мемо с первым словом из второго мемо, и так далее...
iKarma вне форума Ответить с цитированием
Старый 21.10.2011, 15:07   #9
akaKolay
 
Аватар для akaKolay
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

я не знаю как это сделать, но по моему этот код приемлем
akaKolay вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посимвольное сравнение текста Анастасия91 Помощь студентам 1 11.12.2010 08:06
сравнение двух таблиц Iskin Microsoft Office Excel 3 08.12.2010 07:18
сравнение двух документов 30gb Microsoft Office Excel 7 13.09.2010 14:14
сравнение двух днф Zln Помощь студентам 0 11.05.2010 16:42
сравнение двух строк aza_kaz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.01.2010 23:40