Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 131
от 24.05.2005, 12:00

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 11


Вопрос № 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
Здравствуйте, twmd!
LockWindowUpdate(hWndLock:HWND);
Ответ отправил: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное