Вопрос № 21043: Сразу скажу, что я чайник в делфи. Если кто ответит пишите поподробней плиз.
Как можно сравнить два текстовых файла по строкам и если во втором файле строка отличается от строки в первом файле то вывести эту строку в "memo".
И если ...Вопрос № 21045: Уважаемые эксперты.
На ниже приведенном коде, когда я навожу мышкой на крупку текст в memo начинает мигать.
Текст достаточно большой и береться из файла.
Можно ли как нибудь этого избежать?
Если да то как?
Заранее благодарен....
Вопрос № 21043
Сразу скажу, что я чайник в делфи. Если кто ответит пишите поподробней плиз.
Как можно сравнить два текстовых файла по строкам и если во втором файле строка отличается от строки в первом файле то вывести эту строку в "memo".
И если добавилась новая, то тоже вывести тудаже.
Отправлен: 19.05.2005, 01:47
Вопрос задал: kda (статус: Посетитель)
Всего ответов отправлено: 6
Отвечает: Bochvarov NikB
Здравствуйте, kda!
Тьй смотрел такие програмьй? Я пользую Total Commander. Его писали професиональи, и работает хорошо, но часто резултат не такой, какой можно ожидать.
Хочу сказать тебе, что ето (в общем) не простая задача.
И если тьй вьидумал алгоритм - Memo.Lines.Add('stroka'); но если у тебе нет алгоритма (если тьй не знаеш как с ручку сравнит файльи) - плохо :)
Ответ отправил: Bochvarov NikB (статус: 3-ий класс)
Отправлен: 19.05.2005, 02:18
Отвечает: X
Здравствуйте, kda!
Ну в принципе ничего сложного нет. Вот пример.
Приложение:
Ответ отправил: X (статус: 4-ый класс)
Отправлен: 19.05.2005, 08:07
Отвечает: Jadd
Здравствуйте, kda!
ДЫк, собственно, открываются оба файла. Читаешь по строкам (Readln или аналоги) и сравниваешь. Это даже не из дельфи, а просто из учебника. Можно грузить строки во временный буфер, но тут возникнет (обязательно возникнет) вопрос размещения всего этого барахла в памяти, а это не может не сказаться на быстродейсмтвии, а так, как дисковые операции - самые медленные, то и вопрос быстродействия не может не возникнуть. Если еще останутся вопросы - пиши.
Ответ отправил: Jadd (статус: 5-ый класс)
Отправлен: 19.05.2005, 09:19
Отвечает: Malish
Здравствуйте, kda!
var
F1,F2:TextFile;
i:integer;
Temp1,Temp2 : String;
flag:boolean; //Нужна для определения какой файл раньше закончился
begin
flag:=false;
AssignFile(F1,'C:1.txt');
AssignFile(F2,'C:2.txt');
Reset(F1);
Reset(F2);
repeat
readln(F1,Temp1);
readln(F2,Temp2);
if(CompareStr(Temp1,Temp2)<>0) then
Memo1.Lines.Add(Temp2);
if Eof(F1) then
flag:=true;
until Eof(F1) or Eof(F2);
if (flag=true) then
repeat
readln(F2,Temp2);
Memo1.Lines.Add(Temp2);
until Eof(F2);
CloseFile(F1);
CloseFile(F2);
end;
Ответ отправил: Malish (статус: Студент)
Отправлен: 19.05.2005, 11:07
Отвечает: VBA
Здравствуйте, kda!
Var
F1,F2:Text;
Str1,Str2:String;
Begin
AssignFile(F1,'File1.txt');
AssignFile(F2,'File2.txt');
Reset(F1);
Reset(F2);
ReadLn(F1,Str1);
ReadLn(F2,Str2);
If Str1<>Str2 Then
Memo1.Lines.Append(Str2);
Close(F1);
Close(F2);
End;
Можно попробовать использовать функции OpenFile, ReadFile, AnsiCompareStr.
Ответ отправил: VBA (статус: 3-ий класс)
Отправлен: 19.05.2005, 13:27
Отвечает: Ballon
Здравствуйте, kda!
Попробуй вот так:
procedure TForm1.Button1Click(Sender: TObject);
var
f1,f2:TextFile;
s1,s2:string;
begin
AssignFile(f1, 'C:1.txt');//Связываем файл 1.txt с переменной f1
AssignFile(f2, 'C:2.txt');//Связываем файл 2.txt с переменной f2
Reset(f1);//Открываем файл для чтения
Reset(f2);
while not eof(f1) do
begin
Readln(f1,s1);//Считываем строку из первого файла в переменную s1
Readln(f2,s2);//Считываем строку из второго файла в переменную s2
if s1 <> s2 then //Проверяем эти строки на неэдентичность
Memo1.Lines.Add(s1);//Добавляем строку в memo
end;
end;
Ответ отправил: Ballon (статус: 2-ой класс)
Отправлен: 20.05.2005, 12:40
Вопрос № 21045
Уважаемые эксперты.
На ниже приведенном коде, когда я навожу мышкой на крупку текст в memo начинает мигать.
Текст достаточно большой и береться из файла.
Можно ли как нибудь этого избежать?
Если да то как?
Заранее благодарен.
Приложение:
Отправлен: 19.05.2005, 02:32
Вопрос задал: twmd (статус: 4-ый класс)
Всего ответов отправлено: 5
Отвечает: Alex Diesel
Здравствуйте, twmd!<br>Тут вот так написано: Use the OnMouseMove event handler to respond when the mouse pointer moves after the control has captured the mouse. То есть событие генерируется всякий раз когда мышка двигается в предлах кнопки. Поэтому текст и мигает, особенно если мышь оптическая, то курсор подрагивает, а текст обновляется. Как избавиться? Напрмер ввди условие, что если текст в файле и в мемке один и тот же то не надо обновлять мемку. Ну или переменную сигнализирующую о том что в "текущем
наведении мышкой на кнопку" мемка уже обновлялась. Это если использовать это событие.
Ответ отправил: Alex Diesel (статус: 4-ый класс)
Отправлен: 19.05.2005, 04:20
Отвечает: Boriss
Здравствуйте, twmd!
Оно и понятно, что мигает - ведь идет вновь и вновь читается файл и записывается в Memo содержимое файла. Точнее было ба написать не "наведение на кнопку", "перемещение над кнопкой".
Избежать, конечно, лучше всего, если чтение осуществлять после нажатия кнопки мыши, когда курсор над полем. Вариант с установлением полей - флагов, что файл считат по-любому будет тормозным
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 19.05.2005, 07:43
Отвечает: Jadd
Здравствуйте, twmd!
Вообще, за такие программы нужно руки оборвать ;). А если серьезно, то так делать конечно нельзя. Первое. Сделай признак, что файл уже загружен (например, флаг или просто сохрани имя файла, который загружен в мемку) и сравнивай. Тут вся фишка в том, что мемка - это окно, в котором РИСУЕТСЯ (подчеркиваю) текст средствами GDI с теми условиями, которые описаны в свойствах. Ну предствь, что ты заставляешь делать винду каждый раз, когда наводишь курсор на кнопку или внутри кнопки перемещаешь мкрысу. Если не осознать
до конца, запусти программу Spy из набора MS Developer Studio и натрави на мемо. Сразу увидишь какие сообщения каждый раз приходится перемалывать. А ведь это все ЖРЕТ нещадно память. Проще сделать вот как: напиши сообщение OnShoHint и не показывай сам хинт на кнопке, а выводи его в мемку. Чем не решение? Удачи.
Ответ отправил: Jadd (статус: 5-ый класс)
Отправлен: 19.05.2005, 09:27 Оценка за ответ: 5
Ответ отправил: VBA (статус: 3-ий класс)
Отправлен: 19.05.2005, 13:20 Оценка за ответ: 5
Отвечает: streetcat
Здравствуйте, twmd!
может есть способ и красивей, но пока мне на ум приходит только один
заведи вспомогательную переменную типа TStringList читай файл ей а потом присваивай
свойству TMemo.Lines.Text значение свойства переменной f: f.Text
(см. приложение)
проверял на файлах 0,5 кБ и 1 МБ работает уверенно. ;)
Приложение:
Ответ отправил: streetcat (статус: 3-ий класс)
Отправлен: 19.05.2005, 17:14 Оценка за ответ: 5