Page 2 of 2 FirstFirst 1 2
Results 16 to 23 of 23

Thread: Recursie zonder recursie: versie 1.1.2

  1. #16
    Goed, ik heb erover nagedacht en ben tot de volgende conclusies gekomen:
    - Zelf een volledige MatchesMask schrijven is geen optie. Kijk naar de code in Masks en zoek het aantal dergelijke bestaande functies (op bv Torry) en je begrijpt waarom. Dit is gewoon te moeilijk/tijdrovend.
    - Een mogelijkheid zou kunnen zijn om te kijken of de extentie van de mask helemaal uit wildcards bestaat (* of ?) en op basis daarvan twee keer een matches uit te voeren, namelijk één keer op de mask mét extentie en een keer op de mask zonder extentie. Je gaat dan twee keer de (complexe) MatchesMask functie uitvoeren per file.
    - De oplossing die ik uiteindelijk heb bedacht is verreweg de eenvoudigste en is de volgende:
    Code:
    function MatchesFileMask(Filename: string; Mask: string): Boolean;
    begin
    if ExtractFileExt(Filename) = ''then
        FileName := FileName + '.';
      Result := MatchesMask(Filename, Mask);
    end;
    Oftewel: Als de bestandsnaam geen extentie heeft, plak er dan een . achter zodat hij er wel één heeft. Op deze manier kun je zoeken naar *.* en ook de bestanden zonder extentie vinden. Als je expliciet wilt zoeken naar bestanden zonder extentie, dan kun je '*.' als mask opgeven. Het gebruik van ExtractFileExt is heel snel en verwaarloosbaar op de tijd die het kost om de file zelf überhaupt te lezen.

    Extenties van directories worden overigens -in tegenstelling tot wat ik eerder beweerde- niet als extentie gerekend.
    Last edited by GolezTrol; 27-Dec-06 at 11:48.
    1+1=b

  2. #17
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    dat lost nog niet op dat *.* geen directories vindt
    war doesnt determine who's right.... just who's left.

  3. #18
    Euhm nee? In zoverre: *.* vind geen directories met een . in de naam. Dit geldt waarschijnlijk ook voor bestanden die wel een punt in de naam hebben, maar geen feitelijke extentie. Er zou eigenlijk een ExtractFileExt functie moeten zijn die dezelfde regels als Windows hanteert om te bepalen of een extentie wel een extentie is. Volgens mij volgt het de volgende twee regels:
    1. Een directory heeft nooit een extentie
    2. Als er in het gedeelte achter de laatste punt een spatie staat, dan heeft het bestand geen extentie.

    Als er nog meer 'eisen' zijn, dan hoor ik het graag. Voorlopig kom ik dan op deze functie:
    Code:
    function MatchesFileMask(Filename: string; Mask: string; IsDir: Boolean): Boolean;
    var
      Ext: string;
    begin
    ifnot IsDir then
    begin
        Ext := ExtractFileExt(Filename);
        if (Ext = '') or (Pos(' ', Ext) > 0) then
          FileName := FileName + '.';
      endelse
        FileName := FileName + '.';
      Result := MatchesMask(Filename, Mask);
    end;
    [edit] Functie aangepast
    Last edited by GolezTrol; 09-Jan-04 at 10:36.
    1+1=b

  4. #19
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    @GT: zelfs onder dos kon een directory al de naam "blabla.bla" dragen volgens mij, dus ik denk dat je eerste regel niet opgaat
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  5. #20
    De naam kan wel een punt bevatten, maar dit wordt door Windows niet als extentie gezien. Een directory Config.msi (die ik hier toevallig heb staan) heeft, als het aan de verkenner ligt geen extentie.
    1+1=b

  6. #21
    Dat is windows, maar bestandsniveau technisch gezien is het wel een extensie, Of is FAT32 ook daarin veranderd tov FAT16?

    Edit: bestand? vervangen door extensie... ik moet nodig gaan slapen, en het is nog maar 11 uur.
    Nieuw, speciaal voor Borland, de perfecte programmeur.

    Alleen dat ben ik niet

  7. #22
    Ik denk het wel. Ik denk dat het concept Bestand/extentie is verdwenen voor zover het er uberhaupt al was. Maar hoe dan ook; het gaat er in ieder geval om hoe Windows het doet, want we maken een Windows programma en we hebben Windows gebruikers en die zien het als bug als het anders werkt dan Windows. Of een folder in een fat table nou wel of geen extentie heeft doet (in mijn ervaring) in zo'n discussie meestal niet terzake.
    Last edited by GolezTrol; 27-Dec-06 at 11:49.
    1+1=b

  8. #23
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Even een extra opmerking: in plaats van elke keer MatchesMask aan te roepen is 't misschien handiger om een TMask instantie aan te maken om voor elke call te hergebruiken. Intern doet MatchesMask hetzelfde, maar als je die TMask zelf aanmaakt hoeft de mask maar 1x geparsed te worden (wat TMask doet bij Create)... is weer een leuke optimalisatie .
    Qui custodiet ipsos custodes

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. NLDCalendar Versie History
    By eagle00789 in forum NLDCalendar
    Replies: 0
    Last Post: 20-Jul-04, 00:53
  2. van versie 5 naar 7 of 8?
    By Mani in forum Algemeen
    Replies: 1
    Last Post: 23-Feb-04, 13:36
  3. Kiezen upgrade versie Delphi6
    By Nekes in forum Algemeen
    Replies: 2
    Last Post: 25-Nov-01, 21:07

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •