Autor |
Beitrag |
delphinia
      
Beiträge: 131
XP Pro Sp2
Delphi 5 Standard
|
Verfasst: Fr 03.03.06 17:07
Ich habe einen String, der einen Pfad zu einer Datei inkl. eines Parameters enthält.
Bei der Prüfung mittels FileExists - ergibt es durch den parameter imm false. Wie bekomme ich den Parameter aus dem String?
Danke Euch für ein paar Ideen...
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 03.03.06 17:18
Ich weiß nicht ob die Funktion ExtractFilePath und ExtractFileName mit Parameter im Dateinamen zurecht kommen. Hast du das mal ausprobiert? Wenn die damit zurecht kommen dann könnte man den String damit auseinander pfücken und dann wieder zusammenfügen.
Lg Martin
_________________ Ein Nutzer der Ecke
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Fr 03.03.06 17:19
normalerweise ist der parameter immer durch das letzte leerzeichen abgetrennt (wenns einer ist). Schau dir mal die function GetLastDelmiter (oä) an.
mfg
|
|
delphinia 
      
Beiträge: 131
XP Pro Sp2
Delphi 5 Standard
|
Verfasst: Fr 03.03.06 17:31
Zitat: | Ich weiß nicht ob die Funktion ExtractFilePath und ExtractFileName mit Parameter im Dateinamen zurecht kommen. Hast du das mal ausprobiert? Wenn die damit zurecht kommen dann könnte man den String damit auseinander pfücken und dann wieder zusammenfügen.
Lg Martin |
nein - ExtractFileName ist der störenfreid dieser behinhaltet auch den parameter
Zitat: | normalerweise ist der parameter immer durch das letzte leerzeichen abgetrennt (wenns einer ist). Schau dir mal die function GetLastDelmiter (oä) an.
mfg |
ZU GetLastDelmiter habe ich weder hier im Forum noch etwas in der OH etwas gefunden...
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Fr 03.03.06 17:43
Fabian W. hat folgendes geschrieben: | normalerweise ist der parameter immer durch das letzte leerzeichen abgetrennt (wenns einer ist). Schau dir mal die function GetLastDelmiter (oä) an.
mfg |
Moin
Hat er Parameter immer eine feste Länge? Dann kannst du den DateiString um diese Länge 'kürzen' alá DateiString := Copy(DateiString, 1, Length(DateiString)-ParameterLaenge)
Wenn nein, dann geh ich mal davon aus, das der Parameter mit einem Leezeichen an den Dateinamen 'angehängt' ist (standard). Dann prüfe auf dieses Leerzeichen mittels Pos(' ',DateiString) und kopiere 'extrahiere'den DateiString: DateiString := Copy(DateiString, 1,Pos(' ',DateiString)-1)
Gruß
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 03.03.06 17:46
Und was ist wenn der Dateinamen Leerzeichen enthält und was ist wenn mehrere Parameter eingetragen sind? Eventl. sind einige Parameter in Anführungszeichen eingeschlossen da diese auch Leerzeichen enthalten.
Hm. 
_________________ Ein Nutzer der Ecke
|
|
delphinia 
      
Beiträge: 131
XP Pro Sp2
Delphi 5 Standard
|
Verfasst: Fr 03.03.06 17:47
Zitat: | Wenn nein, dann geh ich mal davon aus, das der Parameter mit einem Leezeichen an den Dateinamen 'angehängt' ist (standard). Dann prüfe auf dieses Leerzeichen mittels Pos(' ',DateiString) und kopiere 'extrahiere'den DateiString: DateiString := Copy(DateiString, 1,Pos(' ',DateiString)-1) |
dachte ich auch schon drann nur ist es mir derzeit schwer vorstellebar Gründe an 4 Beispiel gezeigt:
C:\Windows\date1.exe /para1 /para2
oder
c:\Windows\Data1.exe :para1
oder
c:\Windows\Data1.exe -para1
oder
"c:\Windows\Data1.exe" "-par a1"
daran sieht man das ja auch bei den parametern Leerzeichen sein können bespiel 1 und - es eventuell an einem bestimmten Zeichen festmachen, ist auch schwer da es zu viele möglichkeiten gibt unter Windows Parameter zu übergeben!
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 03.03.06 18:02
Versuche mal die folgende Funktion. Diese schneidet die Parameter ab. Ich hoffe die funktioniert.
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:
| function GetFilename (aFilename : String): String; var p: Integer; sep: Boolean; begin p := 0; sep := False;
repeat Inc (p);
if P > Length (aFilename) then Break else if (aFilename [p] = #32) and not sep then begin Dec (p); Break; end else if (aFilename [p] = '"') then sep := Not sep; until False;
if P > 0 then Result := Copy (aFilename, 1, p) else Result := ''; end; |
Lg Martin
_________________ Ein Nutzer der Ecke
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Fr 03.03.06 18:05
delphinia hat folgendes geschrieben: |
ZU GetLastDelmiter habe ich weder hier im Forum noch etwas in der OH etwas gefunden... |
Moin
Das gibt's auch nicht;-) ABER: IsDelimiter, IsPathDelimiter, LastDelimiter... gehört alles zu den SysUtils.
Das nur mal nebenbei bemerkt. Allerdings fin dich die Funktionen nicht so berauschend; kann man auch mit Pos-Funktion hinbekommen
Gruß
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 03.03.06 18:09
raiguen hat folgendes geschrieben: | kann man auch mit Pos-Funktion hinbekommen  |
Mit Pos? Hm. Gibt doch mal ein Biespiel wie du das mit Pos machen würdest.
_________________ Ein Nutzer der Ecke
|
|
delphinia 
      
Beiträge: 131
XP Pro Sp2
Delphi 5 Standard
|
Verfasst: Fr 03.03.06 18:35
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 03.03.06 18:46
Bitte. Kannst es ja mal etwas genauer testen. Wenn es funktioniert oder Du einen Fehler findest dann sag bitte bescheid.
Anschl. packe ich die Funktion in die Delphi-Library. 
_________________ Ein Nutzer der Ecke
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Fr 03.03.06 18:55
delphinia hat folgendes geschrieben: |
dachte ich auch schon drann nur ist es mir derzeit schwer vorstellebar Gründe an 4 Beispiel gezeigt:
C:\Windows\date1.exe /para1 /para2
oder
c:\Windows\Data1.exe :para1
oder
c:\Windows\Data1.exe -para1
oder
"c:\Windows\Data1.exe" "-par a1"
daran sieht man das ja auch bei den parametern Leerzeichen sein können bespiel 1 und - es eventuell an einem bestimmten Zeichen festmachen, ist auch schwer da es zu viele möglichkeiten gibt unter Windows Parameter zu übergeben! |
Moin
Ähm, stimmt... hab ich beim meinen Überlegungne nicht bedacht.
Aber ich hab da nen andere Idee:
Davon ausgehend, das im Dateinamen immer eine Extension alà .exe oder ähnliches vorhanden ist, kann man die Funktion ExtractFileExt(DateiString) nutzen.
Beispiel: ExtractFileExt('C:\Windows\date1.exe /para1 /para2') ergibt .exe /para1 /para2
Also könnte das Rausfischen des dateiNames wie folgt aussehen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function DateiNameOhneParameter(CONST DateiString: String): String; var ExtString: String; nPosLeer, nPosExt: Integer; begin RESULT := ''; ExtString := ExtractFileExt(DateiString); nPosExt := Pos(ExtString, DateiString);
nPosLeer := Pos(' ',ExtString);
RESULT := Copy(DateiString, 1, nPosExt+nPosLeer-1);
end; |
Das funktioniert auch bei Dateinamenmit einer Leerstelle oder Punkt (Ausser dem Punkt bei der Extension). Allerdings darf bei den Parametern KEIN Doppelpunkt (siehe Beispiel 2) vorangestellt sein, da die ExtractFileExt-Funktion diesen als Teils vom Laufwerksbezeichner (C: etc) interpertiert...
Good luck.. und wie gesagt: nur ein Denkanstoß
Gruß
|
|