Вопрос № 173159: Добрый день. Пишу программу для поиска файлов. Поиск должен выполняться в файлах с атрибутом только для чтения. Но почему-то ищет во всех файлах. Не могу понять в чем ошибка в коде.Вопрос № 173159:
Добрый день. Пишу программу для поиска файлов. Поиск должен выполняться в файлах с атрибутом только для чтения. Но почему-то ищет во всех файлах. Не могу понять в чем ошибка в коде.URL >>
Отвечает Абельхарисов Руслан/Marked One, Практикант :
Здравствуйте, ghost32. Что бы поиск слова выполнялся только в файлах с аттрибутом только для чтения, надо код, отвечающий за это действие, поместить в условный оператор:
Код:
At:= FileGetAttr(panel1.Caption+ ListBox1.Items.Strings[index]); if At and faReadOnly = faReadOnly then
begin {Поиск слова} end;
Таким образом процедура Button1Click изменяется:
Код:
procedure TForm1.Button1Click(Sender: TObject); var WordSearch:array [1..7] of char; F:file of char; CountWord,Possit
ion,CountRead,index,At:integer; begin Memo1.Clear; //поиск At:=0; if Length(edSearch.Text)<>7 then Memo1.Lines.Add('Искомое слово должно содержать 7 символов!') else for index:=0 to ListBox1.Count-1 do begin if (ExtractFileExt(panel1.Caption+ ListBox1.Items.Strings[index]))='.txt' then begin At:= FileGetAttr(panel1.Caption+ ListBox1.Items.Strings[index]); if At and faReadOnly = faReadOnly then
begin FileSetAttr((panel1.Caption+ ListBox1.Items.Strings[index]), At - faReadOnly ); AssignFile(F,(panel1.Caption+ ListBox1.Items.Strings[index])); Reset(F); CountWord:=0; Possition:=0; CountRead:=7; while (not EOF(F)) and (CountRead=7) do begin BlockRead(F,WordSearch,7,CountRead);
if WordSearch=edSearch.Text then begin CountWord:=CountWord+1; Possition:=Possition+7; end else begin Possition:=Possition+1; end; Seek(F,Possition); end; Memo1.Lines.Add(inttostr(CountWord)+'
'+ListBox1.Items.Strings[index]); CloseFile(F); if At and faReadOnly <> 0 then begin FileSetAttr((panel1.Caption+ ListBox1.Items.Strings[index]), faReadOnly); At:=0; end; end; end; end; end;
Полный код проекта прикриплен к ответу. Удачи!!!
Прикрепленный файл:загрузить »
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.