Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

Копаясь в примерах нашел такой кусок кода.   Найти похожие ветки 

 
kronprince   (2003-01-10 20:17) [0]


if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then
begin
with StringGrid1 do
begin

Кто знает - зачем нужно следующее сравнение - ведь мы и так ищем FileAttrs ???

if (sr.Attr and FileAttrs) = sr.Attr then
begin
Cells[1,RowCount-1] := sr.Name;
Cells[2,RowCount-1] := IntToStr(sr.Size);
end;
while FindNext(sr) = 0 do
begin
if (sr.Attr and FileAttrs) = sr.Attr then
begin
RowCount := RowCount + 1;
Cells[1, RowCount-1] := sr.Name;

Cells[2, RowCount-1] := IntToStr(sr.Size);
end;
end;
FindClose(sr);
end;
end;


 
Maximator Vetera   (2003-01-10 20:34) [1]

Кто первым нашел с того и спрос.


 
kronprince   (2003-01-10 20:44) [2]

2Maximator © (10.01.03 20:34)
Так нечесно :-\


 
Anatoly Podgoretsky   (2003-01-10 20:48) [3]

мы ищем не FileAttrs, а Edit1.Text, и указываем какие нас аттрибуты в дополнение интересуют.


 
kronprince   (2003-01-10 20:57) [4]

2Anatoly Podgoretsky © (10.01.03 20:48)
Извините - надо было написать вот так :
не ищем FileAttrs ??? а ищем имя файла - атрибуты которого входят в множество атрибутов заданных в FileAttrs с маской имени файла заданной в Edit1.Text

Ну зачем же так придираться :(

Я про то что после FindFirst()=0 и так (TSearchRec.Attr and FileAttrs) = TSearchRec.Attr ведь FileAttrs никто же не менял.


 
Сатир   (2003-01-10 21:09) [5]

а может злой жук закрался в алгоритм или банальная очепятка?


 
Anatoly Podgoretsky   (2003-01-10 21:10) [6]

Придирки нет и смысл совсем жругой, чем у тебя
Пример пусть
FileAttrs = 0110,
1. получено 0101
2. получено 0111

Только вариант 2 сработает, а вариант 1 нет
Зачем это нужно в примере не знаю, обычно интересует только faDirectory для выполнения рекурсивных обращений или фильтрации каталогов, реже другии.


 
Anatoly Podgoretsky   (2003-01-10 21:21) [7]

Поправка, все четыре возможных варианта

1. получено 0000
2. получено 0010
3. получено 0100
4. получено 0110


 
kronprince   (2003-01-10 21:30) [8]

2Anatoly Podgoretsky © (10.01.03 21:21)
Анатолий вот смотрите:
FileAttrs := 0110;
получили
TSearchRec.Attr = 0100;
(TSearchRec.Attr and FileAttrs) = (0100 & 0110) = 0100;
т.е. получается что условие
if (sr.Attr and FileAttrs) = sr.Attr then
будет срабатывать всегда - тогда зачем лишняя проверка ???

ЗЫ: Пример взят > F1(FindFirst) > Example


 
Anatoly Podgoretsky   (2003-01-10 21:36) [9]

Не условия не выполнится, так как 0100 <> 0110


 
TTCustomDelphiMaster   (2003-01-10 21:48) [10]

Anatoly Podgoretsky © (10.01.03 21:36)
0100 and 0110 <> 0100 ?


 
Юрий Зотов   (2003-01-10 21:49) [11]

> kronprince

Во-первых, пример этот оставляет желать лучшего. Любое исключение - и FindClose вызвана не будет. Здравствуй, утечка памяти. Лучше было бы так:

if FindFirst(..) = 0 then
try
repeat
... // Наши действия
until FindNext(..) <> 0
finally
FindClose(..)
end;

Во-вторых, проверка
if A and B = B
это обычная проверка по маске. То есть, проверка, того сброшен ли в A хоть один бит из тех, что установлены в B. Стандартная вещь. Рапишите A и B в двоичном коде и проведите эту проверку вручную - сразу все увидите.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
4-87214
plaha999
2002-12-10 13:35
2003.01.27
Обработка сообщений в HOOKке


14-87138
Stexen
2003-01-10 00:35
2003.01.27
Исходники от UPX!!!!!!


14-87113
Dimka Maslov
2003-01-08 17:59
2003.01.27
Неправильные глаголы русского языка


3-86667
OlegKrt
2003-01-06 08:22
2003.01.27
Ошибка в BLOB Paradox


3-86691
SasaR
2003-01-09 11:19
2003.01.27
SUM(field) = null





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский