Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Copy,Pos Problem (https://www.delphipraxis.net/2240-copy-pos-problem.html)

foxy 14. Jan 2003 13:32


Copy,Pos Problem
 
also jungs ich weis nich ob ich auf dem schlauch stehe oder einfach nur blöd bin ich hab die 2 anwendungen schon 100 mal verwendet aber schaut euch das ma an

Delphi-Quellcode:
var pfad  :String;
    k     :string;
begin
 if opendialog1.Execute then
   begin
     pfad:=opendialog1.FileName;
     k:=Pos('.',pfad); //hier der fehler
     k:=Copy(k,1,3);
     if k= '.bmp' then
bekomm fehler string und integer nich kompatibel
was soll der kack wo issn da ein integer wert?

d3g 14. Jan 2003 13:35

Pos() gibt einen Integer zurück, aber k ist ein String...

foxy 14. Jan 2003 13:35

ahhhhhhhhhhhhhhhhhhhh ich bin soooo scheisse jezt sitz ich 20 min an dem fehler unn er wird mir nich klar .... baaaaaaaaaaa
pos gibts ja nur int werte zurück also bolean sozusagen eben war oder falsh 0 unn 1 määäää naja überflüssiger post sry :P

Luckie 14. Jan 2003 13:42

Nein, pos liefert den Index des ersten Vorkommes von dem Substring im String.

foxy 14. Jan 2003 13:56

em em noch schnell ne frage ....
habe das nun so
Delphi-Quellcode:
if pos('.',pfad) then
wie kann ich es dann machen, das der mit copy erst ab dem punkt das ausschneidet??? kann ja keine feste werte angeben wie 1,3 oder so ....

muss ich dazu die zeichen im string zählen -4 ... wenn ja wie ?? :roll:

Luckie 14. Jan 2003 14:01

was willst du denn erreichen? Die Endung abschneiden, ändern oder nur mit irgendwas vergleichen?

foxy 14. Jan 2003 14:05

endung vergleichen
also if k = '.bmp' then
bla bla

Luckie 14. Jan 2003 14:10

Du mußt von hinten den ersten Punkt suchen. Von vorne gibt das nichts, da im Dateinamen auch schon ein Punkt vorkommen kann.

Delphi-Quellcode:
function GetFileExt(const sFilename: String): string;
var
  rpos : integer;
begin
  rpos := length(sFilename);
  if(pos('.',sFilename) > 0) then
    while(sFilename[rpos] <> '.') and (rpos > 0) do
      dec(rpos);

  Result := copy(sFilename,rpos - 1, length(sFilename));
end;

foxy 14. Jan 2003 14:16

ok thx nur was bedeutet diese Zeile???ß

Zitat:

dec(rpos);

Luckie 14. Jan 2003 14:19

Kuck mal in der Hilfe. Cursor in das uinbekannte Wort stellen und F1 drücken.

Gollum 14. Jan 2003 14:23

Hallo,

Zitat:

dec(rpos);
bedeutet, das die Zählvariable um einen Wert vermindert wird. Das gleiche kannst Du auch mit rpos:=rpos-1 erreichen.

Wenn Du nur die Dateiendung haben willst, kannst Du auch auf Delphi-Bordmittel zurückgreifen.

Mit
Code:
  if (ExtractFileExt(OpenDialog1.FileName)='.bmp') then
erhälst Du das gewünschte. Näheres zur Funktion "ExtractFileExt" findest Du in der Delphi-Hilfe.

Ach ja, noch in der Uses-Klauses die Unit "SysUtils" aufnehmen.

foxy 14. Jan 2003 14:50

SUPER danke genau sowas habe ich gesucht :hello:

Daniel B 14. Jan 2003 17:09

Zitat:

Zitat von foxy
ok thx nur was bedeutet diese Zeile???ß
Zitat:

dec(rpos);

Hallo Heiko,

die Zeile zählt Deine Variable um ein runter.
Das gleiche würdest Du mit MyVar := MyVar -1; erreichen.
Das gegenstück dazu ist Inc(MyVar);.
Das zählt immer um 1 nach oben.

Grüsse, Daniel :hi:

Christian Seehase 17. Jan 2003 23:08

Moin Luckie,

statt der Methode das letzte Auftauchen eines Zeichens selber zu implementieren, kann man auch die Funktion LastDelimiter verwenden.

(wenn ich mich recht erinnere verwendet ExtractFileExt diese auch).

Luckie 18. Jan 2003 03:45

Jupp, kann man, aber dan braucht man wieder die SysUtils und du kennst mich ja. :wink:

Christian Seehase 18. Jan 2003 15:24

Moin Luckie,

ich weiss :mrgreen:

Auf LastDelimiter hinzuweisen konnte ich mir trotzdem nicht verkneifen, immerhin soll's ja auch noch einige geben, mich z.B., die die Delphi Units verwenden ;-)

Eines würde mich allerdings mal interessieren:
Kommt es in Deinen Programmen eigentlich auch mal vor, dass Du Exceptions auslöst (ich möchte jetzt nicht alle durchsehen deswegen ;-) ) ?

Der Weg dies über die Windows API durchzuführen ist mir nämlich etwas zu aufwändig (bzw. ich bin noch nicht so ganz durchgestiegen, wie das genau zu machen ist).

Ich frag' nur, weil diese Klasse ja auch in sysutils deklariert ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.

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