Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > убрать расширение


Автор: neweraser 23.6.2008, 08:39
у меня идет поиск и вывод файлов в Stringrid:

Код

Procedure ScanDir(Dir:string);
var
  SearchRec:TSearchRec;
begin
  if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
  if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
  repeat
    if (SearchRec.name='.') or (SearchRec.name='..') then continue;
    if (SearchRec.Attr and faDirectory)<>0 then
    ScanDir(Dir+SearchRec.name)
  else
  begin
    ScanForm.Grid.RowCount:= ScanForm.Grid.RowCount + 1;
    ScanForm.Grid.Cells[0, i]:= (SearchRec.name);
    ScanForm.Grid.Cells[3, i]:= (dir);
    inc(i);
  end;
  until FindNext(SearchRec)<>0;
  FindClose(SearchRec);
end;

(код взят из DRKB)
мне собственно нужно, чтобы в таблицу выводилось имя файла без расширения и в 3-ю колонку таблицы папка (без полного пути), в которой лежит найденный файл.
помогите  smile 
буду очень признателен

Автор: Frees 23.6.2008, 08:58
используй 
Код

      ExtractFilePath()
      ExtractFileDir()
      ExtractFileName()
      ExtractFileExt()


Добавлено через 4 минуты и 22 секунды
Код

Procedure ScanDir(Dir:string);
var
  SearchRec:TSearchRec;
begin
  if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
  if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
  repeat
    if (SearchRec.name='.') or (SearchRec.name='..') then continue;
    if (SearchRec.Attr and faDirectory)<>0 then
    ScanDir(Dir+SearchRec.name)
  else
  begin
    ScanForm.Grid.RowCount:= ScanForm.Grid.RowCount + 1;
    ScanForm.Grid.Cells[0, i]:=Copy(SearchRec.name, 0,
              StrLen(PAnsiChar(SearchRec.name)) - 4);
    ScanForm.Grid.Cells[3, i]:= ExtractFilePath(dir);
    inc(i);
  end;
  until FindNext(SearchRec)<>0;
  FindClose(SearchRec);
end;

Автор: ama_kid 23.6.2008, 09:19
Цитата(neweraser @  23.6.2008,  08:39 Найти цитируемый пост)
нужно, чтобы в таблицу выводилось имя файла без расширения
Код
ScanForm.Grid.Cells[0, i]:= ExtractFileName(SearchRec.name);

Цитата(neweraser @  23.6.2008,  08:39 Найти цитируемый пост)
в 3-ю колонку таблицы папка (без полного пути), в которой лежит найденный файл
Здесь имхо без вспомсредств не обойтись:
Код
function GetLastFolder(Directory:string):string;
var
 Num,i:integer;
begin
 Result:='';
 if Directory[Length(Directory)]='\' then SetLength(Directory,Length(Directory)-1);
 Num:=LastDelimiter('\',Directory);
 for i:= Num+1 to Length(Directory) do Result:=Result+Directory[i];
end;
...
ScanForm.Grid.Cells[3, i]:= GetLastFolder(Dir);

Автор: neweraser 23.6.2008, 09:21
спасибо! сегодня вечером попробую, но насчет 
Цитата(Frees @  23.6.2008,  08:58 Найти цитируемый пост)
ScanForm.Grid.Cells[3, i]:= ExtractFilePath(dir);

у меня сомнения, т.к. я это кажется уже пробовал, выводило директорию, где находится программа, а у меня поиск производится совсем в другой папке

Автор: MetalFan 23.6.2008, 11:45
Цитата(ama_kid @  23.6.2008,  09:19 Найти цитируемый пост)
Num:=LastDelimiter('\',Directory);
 for i:= Num+1 to Length(Directory) do Result:=Result+Directory[i];

 smile  smile  smile 
а чем copy не угодила?

Автор: neweraser 23.6.2008, 13:54
Цитата(ama_kid @  23.6.2008,  09:19 Найти цитируемый пост)
ScanForm.Grid.Cells[0, i]:= ExtractFileName(SearchRec.name);

все равно выводит с расширениями

Автор: Frees 23.6.2008, 14:01
я так имя без расширения получаю
Цитата(Frees @  23.6.2008,  08:58 Найти цитируемый пост)
ScanForm.Grid.Cells[0, i]:=Copy(SearchRec.name, 0,              StrLen(PAnsiChar(SearchRec.name)) - 4);


Автор: ama_kid 23.6.2008, 14:01
Цитата(neweraser @  23.6.2008,  13:54 Найти цитируемый пост)
все равно выводит с расширениями 

Код
ScanForm.Grid.Cells[0, i]:=StringReplace(ExtractFileName(SearchRec.Name),ExtractFileExt(SearchRec.Name),'',[rfReplaceAll]);


Добавлено через 1 минуту и 24 секунды
Цитата(Frees @  23.6.2008,  14:01 Найти цитируемый пост)
я так имя без расширения получаю
А если расширение больше трех символов?  smile

Добавлено через 2 минуты и 46 секунд
Цитата(MetalFan @  23.6.2008,  11:45 Найти цитируемый пост)
а чем copy не угодила? 
Угодила, в принципе можно и её заюзать, я просто по привычке вручную копирую  smile 

Автор: Frees 23.6.2008, 14:04
Цитата(ama_kid @  23.6.2008,  14:01 Найти цитируемый пост)
ScanForm.Grid.Cells[0, i]:=StringReplace(ExtractFileName(SearchRec.Name),ExtractFileExt(SearchRec.Name),'',[rfReplaceAll]);

ExtractFileName(SearchRec.Name) помоему лишний можно просто SearchRec.Name

Автор: neweraser 24.6.2008, 08:23
всем спасибо, все работает!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)