Avatar billede ultik Nybegynder
29. februar 2000 - 21:42 Der er 12 kommentarer og
4 løsninger

Funktion problemer......

Hej !

Jeg har et problem med en funktion jeg har skruet sammen........

Pointen er at den skal fjerne Path'en fra et filnavn ( fra OpenDialog.Filename ), og finde endelsen ( ext ) og "navnet" (name), f.eks. :

c:\programmer\myWebSite\homepage.html

ext : html
name : homepage

her er hvad jeg har :

msgbox'ene er til debug.......

procedure TfrmMain.GetFileInfo(filename: string; var name: string; var ext: string);
var
  slashPos: Integer;
  Len: Integer;
  rest: Integer;
begin
    while Pos('\',filename) > 0 do begin
    {+}
        slashPos := Pos('\', filename);
        Len := Length(filename);
        rest := Len - slashpos;
        filename := Copy(filename,slashpos,rest);
    end;
    if Pos('.', filename) > 0 then begin
        name := Copy(filename,1,Pos('.', filename));
        ext  := Copy(filename,Length(name),Length(filename)-Length(name));
    end
    else name := filename;
    ShowMessage(name);
        ShowMessage(ext);
end;

jeg ved godt at ext nok vil have komma med, men problemet ligger i at jeg INTET resultat får, ( måske en masse spaces, men ellers ikke ! )....

Anyhelp anyone ?

Med venlig hilsen
Ulrik Jensen
ultik@cyberdude.com
Avatar billede ultik Nybegynder
29. februar 2000 - 21:44 #1
jeg ved godt at ext nok vil have komma med,

================================

jeg ved godt at ext nok vil have punktum med,
Avatar billede erikjacobsen Ekspert
29. februar 2000 - 22:16 #2
uses Sysutils;

......

procedure TfrmMain.GetFileInfo(filename: string; var name: string; var ext: string);
begin
  ext:=ExtractFileExt(filename);
  name:=ExtractFileName(filename)
end;
Avatar billede dj Nybegynder
29. februar 2000 - 22:18 #3
Du havde ikke overvejet at bruge:

Extractfilepath(opendialog1.filename) //finder stien biblioteket hvori filen findes.

Extractfileext(opendialog1.filename) //finder fil endelsen på filnavnet eks. "exe" eller "txt".

Mvh _DJ_ /#delphi (undernet)
SGUFT Software
Avatar billede kokoko Nybegynder
29. februar 2000 - 22:19 #4
Sagde du ikke det var en function du ville lave? så er det nok en god ide at skrive function istedet for procedure.

Du skal nok lave to functioner, en til hvert ting. Som nedenunder:

Function FindNavn(FilNavn: String): String;
Begin
  // Her skal koden være
  Result := Navn;
End;

og så næsten det samme i den næste, sig til hvis du har problemer.

Kokoko

Avatar billede erikjacobsen Ekspert
29. februar 2000 - 22:19 #5
Sorry, huskefejl. ExtractFileName giver med dit eksempel 'homepage.html'.
Så kan du

  i:=length(name);
  while (i>1) and (name[i]<>'.') dec(i);
  if name[i]='.' then
    name:=copy(name,1,i-1);
Avatar billede sjensen Nybegynder
29. februar 2000 - 22:24 #6
Skriv den sådan i stedet:

procedure TfrmMain.GetFileInfo(filename: string; var name: string; var ext: string);
var
  s : string;
  e : string;
  p : Integer;
begin
  name := '';
  ext  := '';
  s := extractfilename(filename);  // indbygget delphifunktion: returnerer homepage.htm
  s := trim(s); // trim sletter alle spaces før og efter tekst. En indbygget delphi funktion
  if s <> '' then
  begin
    e := trim(extractfileext(s)); // indbygget delphi funktion: returnerer .htm
    if e <> '' then
    begin
      p := pos(e,s); // find .htm's pos i homepage.htm
      if e[1] = '.' then delete(e,1,1); // hvis første tegn i ext er et punktum, så slet det
      ext := e;
      if p > 0 then s := copy(s,1,p-1);  // fjern .htm fra homepage.htm
      name := s;
    end;
  end; 
end;
Avatar billede retep Nybegynder
29. februar 2000 - 22:28 #7
Her har du din egen omskrevet en smugle... Du havde misforstået Copy-funktionen...

procedure GetFileInfo(filename: string; var name: string; var ext: string);
var
  slashPos: Integer;
  Len: Integer;
  rest: Integer;
begin
    while Pos('\',filename) > 0 do begin
    {+}
        slashPos := Pos('\', filename);
        Len := Length(filename);
        rest := Len - slashpos;
        filename := Copy(filename,slashpos + 1,rest);
    end;
    showmessage(filename);
    if Pos('.', filename) > 0 then begin
        name := Copy(filename, 1 , Pos('.', filename) - 1);
        ext  := Copy(filename,Pos('.', filename)+1, length(filename));
    end
    else name := filename;
    ShowMessage(name);
        ShowMessage(ext);
end;

Mvh
Retep
Avatar billede sjensen Nybegynder
29. februar 2000 - 22:31 #8
Alle andre end Erik glemte lige at name skulle være uden ext !!

Og erik. I dit huskesvar forudsætter du at filnavnet virkeligt har en ext. Men det behøver jo ikke at være tilfældet.

I mit eks. vil det virke hvis ikke tilfældigvis filen hedder homepage.htm.htm

i dette tilfælde skulle linien

if p > 0 then s := copy(s,1,p-1);  // fjern .htm fra homepage.htm

erstattes med

p = pos(e,s);
while p > 0 do
  s := copy(s,1,p-1);
  p := pos(e,s);
end;
Avatar billede erikjacobsen Ekspert
29. februar 2000 - 22:34 #9
Bemærk lige, at en fil sagtens kan hedde:  a.b.c.htm.d.s.a.htm
Ja, ok, i princippet  ... ;-)  Man skal derfor søge efter ekstension-
punktummet bagfra. med mindre naturligvis ultik ved, der kun er
et punktum i navnet.
Avatar billede retep Nybegynder
29. februar 2000 - 22:34 #10
Sjensen>> Jeg vil gerne fritages fra ovenstående beskyldning ;-)
Avatar billede erikjacobsen Ekspert
29. februar 2000 - 22:36 #11
Jeg glemte et "do" ... men hvis der ikke er en extension, bliver
der heller ikke fjernet noget.
Avatar billede ultik Nybegynder
29. februar 2000 - 22:40 #12
Tak for det, jeg har fordelt givet point, ud efter den løsning jeg helst vil bruge, men alle har fået noget !
Avatar billede ultik Nybegynder
29. februar 2000 - 22:44 #13
hmm......
den ville ikke fordele mine point........

prøver igen !
Avatar billede sjensen Nybegynder
29. februar 2000 - 22:45 #14
Retep, Jep du er fritaget. Du svarede mens jeg skrev så jeg så slet ikke dit svar.


Avatar billede ultik Nybegynder
29. februar 2000 - 22:49 #15
Hmm......... Kan ikke fordele points'ene bedre end nornalt, hvis nogle er utilfredse, så bare mail mig, så finder vi ud af noget.........

ultik@cyberdude.com
Avatar billede erikjacobsen Ekspert
29. februar 2000 - 23:22 #16
Fint nok - vi er alle på vej til at slå Cyberesben af pinden som
nummer 1 på eksperten.  ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester