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.
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.
ExtractFileName i pokrewne.
A dla pascala : fsplit()
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
{$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.
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;
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.