Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prüfen ob string auf '.exe' endet (https://www.delphipraxis.net/192792-pruefen-ob-string-auf-exe-endet.html)

zobien123 19. Mai 2017 10:04

Prüfen ob string auf '.exe' endet
 
Hi :-D

folgendes Problem:pale:: Ich möchte einen String aus einem Edit-Feld prüfen, ob er auf '.exe' endet, wenn nicht soll '.exe' angehängt werden. Gibt es irgendwie eine Funktion, mit der man von rechts nach links die Zeichen überprüfen kann, ob diese '.exe' sind?

Vielen Dank für eure Antwort

Neutral General 19. Mai 2017 10:10

AW: Prüfen ob string auf '.exe' endet
 
Delphi-Quellcode:
if AnsiLowerCase(ExtractFileExt(str)) = '.exe' then

Poelser 19. Mai 2017 10:18

AW: Prüfen ob string auf '.exe' endet
 
Einfach aus SysUtils ChangeFileExt die Extension ändern. Wenn die bereits auf .exe lautet, bleibt sie so wie sie ist.

HTH, Poelser

Aviator 19. Mai 2017 10:22

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

Zitat von Poelser (Beitrag 1372039)
Einfach aus SysUtils ChangeFileExt die Extension ändern. Wenn die bereits auf .exe lautet, bleibt sie so wie sie ist.

HTH, Poelser

Das ist aber sehr radikal. Welchen Vorteil erhoffst du dir davon? :shock:

zobien123 19. Mai 2017 10:23

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

if AnsiLowerCase(ExtractFileExt(str)) = '.exe' then
Klingt gut, jedoch bekomme ich eine Fehlermeldung:
Zitat:

E2015 Operator ist auf diesen Operandentyp nicht anwendbar
<Edit> Ich kann wohl nicht AnsiLowerCase(ExtractFileExt(s)) = '.exe' vergleichen</Edit>

zobien123 19. Mai 2017 10:32

AW: Prüfen ob string auf '.exe' endet
 
Okay hab es. War ein Dummheitsfehler :oops:

Code:
 
  if AnsiLowerCase(ExtractFileExt(s)) <> '.exe' then
  begin
    s := s + '.exe';
  end;

Danke für die Hilfe :thumb:

hoika 19. Mai 2017 10:52

AW: Prüfen ob string auf '.exe' endet
 
Hallo,
mit Pos oder Copy wäre das auch gegangen

if Pos('.exe',S)=Length(S)-4 (oder -3 ;) )
if Copy(S,Length(S)-4,4)='.exe'

Das Upper darf der TE selber einfügen ...

Delphi-Laie 19. Mai 2017 11:00

AW: Prüfen ob string auf '.exe' endet
 
Ich würde vorher noch mit lowercase "normieren", denn so, wie es hier angeboten wird, wird z.B. ".EXE" nicht erfaßt, obwohl das eine zulässige Executable-Endung ist.

Daniel 19. Mai 2017 11:03

AW: Prüfen ob string auf '.exe' endet
 
Ich nutze für sowas gern "EndsText()" aus der Unit System.StrUtils.
Wobei sich diese Funktion nur um Strings kümmert - ob das nun ein Dateiname ist, interessiert sie nicht.

DeddyH 19. Mai 2017 11:03

AW: Prüfen ob string auf '.exe' endet
 
Delphi-Quellcode:
uses StrUtils;

...

if AnsiEndsText('.exe', s) then
  ...
[edit] @Cheffe :lol: [/edit]

Ydobon 19. Mai 2017 11:11

AW: Prüfen ob string auf '.exe' endet
 
Wenn in XE 2 schon dabei,
Delphi-Quellcode:
function EndsText(const ASubText, AText: string): Boolean;
aus den StrUtils. Ignoriert von sich aus die Schreibweise.

Edit: Die Aktualisierung der Beiträge im Forum könnte etwas schneller sein.

Poelser 19. Mai 2017 11:12

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

Zitat von Aviator (Beitrag 1372043)
Zitat:

Zitat von Poelser (Beitrag 1372039)
Einfach aus SysUtils ChangeFileExt die Extension ändern. Wenn die bereits auf .exe lautet, bleibt sie so wie sie ist.

HTH, Poelser

Das ist aber sehr radikal. Welchen Vorteil erhoffst du dir davon? :shock:

Leicht lesbarer Einzeiler. :)

Aviator 19. Mai 2017 11:25

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

Zitat von Poelser (Beitrag 1372059)
Leicht lesbarer Einzeiler. :)

Allerdings mit einer nicht so ganz zufriedenstellenden Lösung. :mrgreen:

Fritzew 19. Mai 2017 12:26

AW: Prüfen ob string auf '.exe' endet
 
Dafür bieten sich Unittests förmlich an:

Delphi-Quellcode:
unit Unit30;

interface
uses
  DUnitX.TestFramework;

type

  [TestFixture]
  TExtensionTests = class(TObject)
  public
    [Test]
    [TestCase('TestA1','test,test.exe')]
    [TestCase('TestA2','test.,test.exe')]
    [TestCase('TestA3','test.e,test.exe')]
    [TestCase('TestA4','test.e.,test.e.exe')]

    procedure Test1(const Value, res : string);


    [Test]
    [TestCase('TestB1','test,test.exe')]
    [TestCase('TestB2','test.,test.exe')]
    [TestCase('TestB3','test.e,test.exe')]
    [TestCase('TestB4','test.e.,test.e.exe')]
    procedure Test2(const Value, res : string);


  end;

implementation
 uses Sysutils;

const
  lext = '.exe';


function ChangeExtension(const Value : string; const extension : string) : string;
begin
  result := ChangeFileExt(Value, extension);
end;


function ChangeExtensionEndsText(const Value : string; const extension : string) : string;
begin
 result := Value;
 if AnsiLowerCase(ExtractFileExt(result)) <> '.exe' then
  begin
    result := result + '.exe';
  end;
end;


procedure TExtensionTests.Test1(const Value, res : string);
Var
    lTestResult : String;

begin
 lTestResult :=  ChangeExtension(value, lext);
 assert.AreEqual(res, lTestResult);
end;


procedure TExtensionTests.Test2(const Value, res : string);
Var
    lTestResult : String;

begin
 lTestResult :=  ChangeExtensionEndsText(value, lext);
 assert.AreEqual(res, lTestResult);
end;

initialization
  TDUnitX.RegisterTestFixture(TExtensionTests);
end.
Wenn man erst mal angefangen hat Tests zu schreiben wird man förmlich süchtig danach :-D

SneakyBagels 19. Mai 2017 19:34

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

Dafür bieten sich Unittests förmlich an:
Man kann auch mit Kanonen auf Spatzen schießen ;)

Fritzew 19. Mai 2017 20:19

AW: Prüfen ob string auf '.exe' endet
 
Zitat:

Zitat von SneakyBagels (Beitrag 1372113)
Zitat:

Dafür bieten sich Unittests förmlich an:
Man kann auch mit Kanonen auf Spatzen schießen ;)

Stimmt! :-D
Aber das Ergebnis spricht für sich....

Das schöne ist, wenn man einmal angefangen hat hilft es echt....
Und in diesem Zusammenhang Danke Stevie für Testinsight


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz