Jak zrobić funkcje w której jako zmienna podaje się

0

Jak zrobić funkcje w której jako zmienna podaje się nazwe pliku a podaje ona pierwsza część nazwy, bez rozszerzenia?? Pomóżcie, nie mam pojęcia jak to zrobić.

Zapomniałem dodać, że rozszerzenia jest takie zawsze takie same i znane.

0

ExtractFileName i pokrewne.

0

A dla pascala : fsplit()

0

Jak zrobić funkcje (..) nie mam pojęcia jak to zrobić.

function ExtractExtensionWithoutDot(const FileName: ShortString): ShortString;
var
  I: Integer;
  S: ShortString;
begin
  for I := Length(FileName) downto 0 do
  // Jeżeli to będzie kropka - zaczyna nazwa pliku (przerwać szukanie)
  // Jeżeli to nie będzie kropka - dodać ten znak do zmiennej i kontynuować
  if FileName[I] = '.' then Break else S := FileName[I] + S;
  Result := S;
end;

function ExtractFileNameWithoutDot(const FileName: ShortString): ShortString;
var
  I: Integer;
  S: ShortString;
begin
  S := FileName;
  for I := Length(FileName) downto 0 do
  begin   
    // Skasować znak (nie ważne jaki)
    Delete(S, I, I);
    // Jesli kolejny znak będzie kropką  - mamy nazwę, jeśli nie - szukamy dalej
    if FileName[I] = '.' then Break else Continue;
  end;
  Result := S;
end;

// jakby to powiedzieć - bardziej nieefektywnej metody dawno nie widziałem. słyszałeś o funkcji copy? - ŁF

0
{$apptype console}
uses sysutils;
function fn(name:string):string;
var i,j:word;
begin
  i:=length(name);
  j:=i;
  while wordbool(i) do {tu sobie ustawimy jeden znacznik}
    begin
      if name[i] in[#92,#58]then break; { \ : }
      if name[i]=#46 then               { .   }
        begin
          j:=i-1;
          break
        end;
      dec(i)
    end;
  while wordbool(i) do {tu ustawimy drugi i coś zrobimy z pierwszym}
    begin
      if name[i] in[#92,#58]then
        begin
          fn:=copy(name,i+1,j-i);       {result:=}
          exit
        end;
      dec(i)
    end;
  fn:=copy(name,1,j) 
 {najgorsze jest to, że przy braku \:. w ciągu znaków trzeba}
 {przejść obie pętle od początku do końca}
end;

begin
  writeln(fn('bleble0.ext'));
  writeln(extractfilename(fn('c:\ble\bleble1')));
  writeln(fn('c:ble\bleble2'));
  writeln(fn(extractfilename('c:\ble\bleble3.ext')));
  writeln(fn('c:bleble4.ext'));
  writeln(fn('c:bleble5'));
  writeln(fn('bleble6'));
  {jak widać kolejność wywołan dowolna}
end.
0

nie jest to moze cos wspanialego, ale pokaze swoja funkcje :D

function nazwa(cfilename:string):string;
var s:string;
begin
s:=extractfileext(cfilename);
result:=cfilename;
delete(result,length(result)-length(s)+1,length(s)+1);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1