AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language ExtractFilePath aus einem String mit zwei Dateiangaben
Thema durchsuchen
Ansicht
Themen-Optionen

ExtractFilePath aus einem String mit zwei Dateiangaben

Ein Thema von globalenemy · begonnen am 24. Mär 2014 · letzter Beitrag vom 25. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
globalenemy

Registriert seit: 24. Mär 2014
10 Beiträge
 
#1

ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 19:29
Delphi-Version: 7
Grüße,

Ich möchte gerne aus einem String den Pfad zu einer Datei holen. Das soll ja ganz einfach mit ExtractFilePath aus SysUtils gehn, allerdings enthält mein String auch die zu übergebenden Parameter.
Wie kann ich den Pfad der gewünschten Datei holen, wenn in den Parametern Dateien bzw. Pfadangaben zu finden sind?

ExtractFilePath("C:\Hello\You.exe C:\Bye\You.exe")
returns: "C:\Hello\You.exe C:\Bye\"
i want: "C:\Hello\"

ps: Es ist nicht gegeben, dass der Dateiname immer mit .exe endet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.286 Beiträge
 
Delphi 12 Athens
 
#2

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 19:36
Es ist ganz "einfach" Du mußt zuerst die beiden Dateien auftrennen, also den Pfad von den Parametern trennen.

Und dann kannst du mit ExtractFilePath den Dateinamen rausholen.

Tipp:
Wenn der Pfad mit " anfängt, dann das nächste " suchen und dazwischen ist nun der Pfad.
Fängt es nicht mit " an, dann nach dem ersten Leerzeichen suchen und davor steht dann der Pfad.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
globalenemy

Registriert seit: 24. Mär 2014
10 Beiträge
 
#3

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 20:15
hmm. Ich komm damit leider noch nicht weiter. Ich weiß nicht wie ich den Dateinamen von den Parametern trennen soll.

Der String könnte schließlich auch so aussehen:
Code:
C:\Hey.Hello There\You.exe C:\Ok.Bye Then\You.exe
Ich kann nicht auf Leerzeichen trennen. Ich kann auch nicht auf den Punkt trennen. :\
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.286 Beiträge
 
Delphi 12 Athens
 
#4

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 21:00
Der String könnte schließlich auch so aussehen:
Code:
C:\Hey.Hello There\You.exe C:\Ok.Bye Then\You.exe
Nein, kann es nicht, bzw. sollte es nicht.

Alle ordentlichen Programme, welche Pfade via Parameter übergeben, machen die "..." drumrum, wenn sich Leerzeichen im Pfadnamen befinden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
globalenemy

Registriert seit: 24. Mär 2014
10 Beiträge
 
#5

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 21:09
Vielen Dank für Eure Antworten! :-*

Mit dem Post von Popov konnte ich mein Problem lösen.

Code:
procedure TForm1.CheckBox1Click(Sender: TObject);
var
  St1: String;
  Int1, Int2: Integer;
begin
  if CheckBox1.Checked = True then
    begin
      if Edit1.Text[1] <> '\' then
        begin
          Edit2.Enabled := True;
          St1 := Edit1.Text;
          Int1 := PosEx(':\', St1, 0);
          Int2 := PosEx(':\', St1, Int1 + 1);
          if Int2 > Int1 then Edit2.Text := ExtractFilePath(Copy(St1, 1, Int2 - 1))
          else Edit2.Text := ExtractFilePath(St1);
        end
      else Edit2.Text := ExtractFilePath(Edit1.Text);
      ActiveControl := Edit2;
    end
  else
    begin
      Edit2.Enabled := False;
      Edit2.Text := ' override working path...';
    end;
end;
"C:\Hey.Hello There\You.exe C:\Ok.Bye Then\You.exe"
= "C:\Hey.Hello There\"
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 21:12
Wobei es wahrscheinlicher ist, dass es so aussieht:
Code:
"C:\Hey.Hello There\You.exe" "C:\Ok.Bye Then\You.exe"
, denn welchen Sinn macht es beide Pfade einzuschließen. Es sein denn es ist ein Parameter und soll von anderen getrennt sein.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 21:19
Es stellt sich ja nun die Frage, wie überhaupt diese Parameter in das Programm kommen.

Über Delphi-Referenz durchsuchenParamStr und werden zusammengesetzt?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.739 Beiträge
 
Delphi 2007 Professional
 
#8

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 21:20
Woher kommt denn der String? Als Programmargument, Benutzereingabe, ...? Vielleicht kannst du ja im Vorfeld schon dafür sorgen, dass die beiden Teile getrennt bleiben.
Uli Gerhardt
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 20:19
Vorausgesetzt da ist kein Netzwerk-Pfad drin:

Delphi-Quellcode:
uses
  StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  s, s1, s2: String;
  p1, p2: Integer;
begin
  s := '"C:\Hello\You.exe C:\Bye\You.exe"';

  if Length(s) > 0 then //entfent Anführungszeichen, falls vorhenden
    if s[1] = '"then Delete(s, 1, 1);

  if Length(s) > 0 then //entfent Anführungszeichen, falls vorhenden
    if s[Length(s)] = '"then Delete(s, Length(s), 1);

  p1 := PosEx(':\', s, 0); //Für PosEx StrUtils in uses einfügen
  p2 := PosEx(':\', s, p1 + 1);

  if p2 > p1 then
  begin
    s1 := Copy(s, 1, p2 - 1);
    s2 := Copy(s, P2 - 1, MaxInt);
  end
  else
  begin
    s1 := s;
    s2 := '';
  end;

  ShowMessage(
    'Path1: ' + ExtractFilePath(s1) + ^j +
    'Path2: ' + ExtractFilePath(s2));
end;
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: ExtractFilePath aus einem String mit zwei Dateiangaben

  Alt 24. Mär 2014, 20:25
Man kann auch eine TStringList mit DelimitedText und QuoteChar nehmen. Die macht den ganzen Spaß alleine.

http://www.delphibasics.co.uk/RTL.asp?Name=TStringList

3. Beispiel:
Delphi-Quellcode:
var
  cars : TStringList; // Define our string list variable
  i : Integer;
begin
  // Define a string list object, and point our variable at it
  cars := TStringList.Create;

  // Now add some cars to our list - using the DelimitedText property
  // with overriden control variables
  cars.Delimiter := ' '; // Each list item will be blank separated
  cars.QuoteChar := '|'; // And each item will be quoted with |'s
  cars.DelimitedText := '|Honda Jazz| |Ford Mondeo| |Jaguar "E-type"|';

  // Now display these cars
  for i := 0 to cars.Count-1 do
    ShowMessage(cars[i]); // cars[i] equates to cars.Strings[i]

  // Free up the list object
  cars.Free;
end;
Ausgabe:
Code:
   Honda Jazz
   Ford Mondeo
   Jaguar "E-type"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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