Entwickler-Ecke
Dateizugriff - Parameter aus String trennen
delphinia - Fr 03.03.06 17:07
Titel: Parameter aus String trennen
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 - 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
Fabian W. - 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 - 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 - 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 - 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. :gruebel:
delphinia - 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 - 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
raiguen - 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 - 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.
delphinia - Fr 03.03.06 18:35
Martin1966 hat folgendes geschrieben: |
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 |
das sieht derzeit sehr gut aus!
Danke Dir
Martin1966 - 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. ;-)
raiguen - 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ß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!