Autor Beitrag
schitho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 288

XP Home SP2
D2005 Prof
BeitragVerfasst: Mo 07.03.05 23:43 
Hi,

wie kann ich aus einem String den Pfad inkl. Dateiname ermitteln.

Beispiel:

Aus

C:\Programme\AVPersonal\AVGNT.EXE /min soll C:\Programme\AVPersonal\AVGNT.EXE werden.

Oder:

"C:\Programme\Zone Labs\ZoneAlarm\zlclient.exe" -> C:\Programme\Zone Labs\ZoneAlarm\zlclient.exe

RUNDLL32.EXE C:\WINDOWS\system32\NvCpl.dll,NvStartup -> RUNDLL32.EXE


Oder anders gesagt:

Ich möchte die Anführungszeichen und die Parameter entfernen.

Wie mach ich das?

Gruß
Thomas

_________________
(Sorry! Leider ewiger Delphi-Neuling)
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 07.03.05 23:53 
Überprüfe mit Suche in: Delphi-Forum, Delphi-Library POS wo die Zeichen auftreten, und lösche sie bzw. lösche die Zeichen danach.
schitho Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 288

XP Home SP2
D2005 Prof
BeitragVerfasst: Di 08.03.05 00:14 
Danke für Deine Antwort.

Hab es nun so gelöst:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
function DeleteZeichen(s,z:string): string;
begin
  if Pos(z,s)>0 then
  begin
    Delete(s,Pos(z,s),1);
    s:=DeleteZeichen(s,z);
  end;
  result:=s;
end;

function DeleteParam(s:string):string;
// Quelle: http://www.delphi-forum.de/viewtopic.php?t=21430&highlight=endungen+extractfilepath
const
  Endungen : array[0..2of string[4] =
    ('.exe','.bat','.com');
var
  t : string;
  a, b : Integer;
begin
  s:=DeleteZeichen(s,'"');
  t:=ExtractFileName(s);
  for a:=0 to 2 do
  begin
    b:=Pos(Endungen[a]+' ',LowerCase(t));
    if b > 0 then
    begin
      t:=Copy(t,1,b+3);
      Break;
    end;
  end;
  result:=ExtractFilePath(s)+t;
end;


Gruß
Thomas

_________________
(Sorry! Leider ewiger Delphi-Neuling)
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Di 08.03.05 08:42 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   for a:=0 to 2 do
  begin
    b:=Pos(Endungen[a]+' ',LowerCase(t));
    if b > 0 then
    begin
      t:=Copy(t,1,b+3);
      Break;
    end;
  end;


Kleiner Tipp:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  for a:=[b]low(Endungen)[/b] to [b]High(Endungen)[/b] do
  begin
    b:=Pos(Endungen[a]+' ',LowerCase(t));
    if b > 0 then
    begin
      t:=Copy(t,1,b+3);
      Break;
    end;
  end;



Wenn du low und high verwendest bekommst Du immer das untere und obere Ende deines Arrays, falls Du noch eine Erweiterung hinzufügst müßtest du am sonstigen Quelltext nichts mehr ändern


Zur Pos Abfrage der Endung:c:\Programme\Meine.exe-Verzeichnisse\Programm.ini

das .exe solltest du nicht beachten.

Martin
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.03.05 11:11 
Es gibt schon ein paar nette Funktionen im Betriebssystem, die man nutzen kann. Weil es OS-Funktionen sind, geht es mit PChar natürlich einfacher:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
var
  s  : array[0..MAX_PATH]of char;
begin
  ZeroMemory(@s,sizeof(s));
  lstrcpy(s,'RUNDLL32.EXE C:\WINDOWS\system32\NvCpl.dll,NvStartup');

  PathRemoveArgs(s);     // Parameter entfernen
  PathUnquoteSpaces(s);  // Anführungszeichen entfernen (wenn vorhanden)

  ShowMessage(s);
end;

Mit Strings müsstest du etwas mehr hantieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  s : string;
begin
  SetLength(s,MAX_PATH);
  lstrcpy(@s[1],'"C:\Programme\Zone Labs\ZoneAlarm\zlclient.exe"');
  SetLength(s,lstrlen(pchar(s)));

  PathRemoveArgs(@s[1]);
  PathUnquoteSpaces(@s[1]);

  ShowMessage(s);
end;

Wie gesagt, es gibt noch weitere wirklich gute Funktionen, die ich auch schon mal hier im Forum vorgestellt habe.