Главная страница
    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.01 c
14-87061
Виталий
2003-01-08 14:49
2003.01.27
Общие вопросы


1-86800
Бух
2003-01-18 18:06
2003.01.27
создание каталога в текущем.


6-86994
Vlad-Sh
2002-11-29 06:33
2003.01.27
Не могу задать порт источника в TIdUDPClient (Delphi 6)


1-86736
члм
2003-01-17 12:00
2003.01.27
нужна хелпа


6-87010
Uran
2002-12-02 12:00
2003.01.27
Как узнать IP имени машины?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский