Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String in Value konvertieren (https://www.delphipraxis.net/24507-string-value-konvertieren.html)

cyberrowdy72 22. Jun 2004 11:21


String in Value konvertieren
 
Hallo.

Ich programmiere grad ein mehrfachumbenennungstool. Dabei soll aus einem String ein evtl. vorhandener Zahlenwert extrahiert werden, sowas wie StrToValue, leider gibts so ne Funktion nicht und ich wollte sie auch nicht selber programmieren.
Gibts so eine Funktion die ein Äquivalent zu der in Basic verfügbaren Funktion "VAL()" darstellt?
Funktionen wie Val, StrToIntDef konvertieren ja nur Zeichenketten, in denen NUR ein Integer enthalten ist, aber kein text...

Könnt Ihr mir da einen Tip geben :gruebel:

MrSpock 22. Jun 2004 11:28

Re: String in Value konvertieren
 
Hallo cyberrowdy72,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Die Funktion, die du suchst heißt StrToInt bzw. StrToFloat.

Stevie 22. Jun 2004 11:33

Re: String in Value konvertieren
 
Zitat:

Zitat von MrSpock
Die Funktion, die du suchst heißt StrToInt bzw. StrToFloat.

Wohl kaum, denn er sucht eine Funktion, die aus dem String 'Hieristeine10versteckt' den Integerwert 10 macht, denn

Zitat:

Zitat von cyberrowdy72
Dabei soll aus einem String ein evtl. vorhandener Zahlenwert extrahiert werden

Ich denke nicht, dass sowas schon in den Delphi-Libs ist, sowas musst du wohl über "Zahlen-rausfiltern" selber machen.

cyberrowdy72 22. Jun 2004 11:35

Re: String in Value konvertieren
 
Stevie hat Recht, mit den Standardfunktionen komm ich eben nicht weiter (Programmiere schon länger als ich im Forum vertreten bin ;-)
OK, also wenns so eine fkt. in pascal nicht gibt muss ich sie eben selber proggen.

Trotzdem thx.

Smokey 22. Jun 2004 11:37

Re: String in Value konvertieren
 
verstehe ich dich richtig und du willst zum Beispiel aus dem String "Route66" die 66 extrahieren lassen und zu einer Zahl konvertieren???

weil das würde so nicht gehen denke ich. Da müsstest du dann vorher selbst Hand anlegen.

Bei einfacher Konvertierung von Strings wie "6786786" zum Zahlenwert, stehen die Funktionen StrToInt oder Val() zur Verfügung.

Stevie 22. Jun 2004 11:45

Re: String in Value konvertieren
 
Ok, ist vielleicht nicht gerade die schnellste Möglichkeit, aber sie funktioniert einigermaßen... :roll:
Delphi-Quellcode:
function ExtractInt(s: string): Integer;
var
  i, x: Integer;
begin
  i := 0;
  for x := 1 to Length(s) do
    if s[x] in ['0'..'9'] then
      i := (i * 10) + StrToInt(s[x]);
  Result := i;
end;
[edit]Verschreiber korrigiert! :wall:[/edit]

Tom 22. Jun 2004 11:52

Re: String in Value konvertieren
 
Zitat:

Zitat von Stevie
aber sie funktioniert einigermaßen... :roll:

Spontan würde ich sagen, dass die Funktion bei der Übergabe von z.B. 26 als Ergebnis 0 liefert ..., ich denk mal der Source funktioniert, wenn nur Zahlen mit Einsen und Nullen enthalten sind.

Stevie 22. Jun 2004 11:58

Re: String in Value konvertieren
 
Zitat:

Zitat von Tom
Zitat:

Zitat von Stevie
aber sie funktioniert einigermaßen... :roll:

Spontan würde ich sagen, dass die Funktion bei der Übergabe von z.B. 26 als Ergebnis 0 liefert ..., ich denk mal der Source funktioniert, wenn nur Zahlen mit Einsen und Nullen enthalten sind.

Korrekt! :wall: Dummer Verschreiber... :oops:

cyberrowdy72 22. Jun 2004 12:07

Re: String in Value konvertieren
 
Für alle die eine solche Fkt. benötigen hier ist sie. Wird als linked true angegeben, werden alle enthaltenen Zahlen aneinandergereiht, andernfalls wird nach der ersten zusammenhängenden Zahl abgebrochen. Ist keine Zahl enthalten liefert die Funktion den Wert 0.

Delphi-Quellcode:
function StrToVal(str:string;linked:boolean):integer;
var i:integer; res:string;
begin
 for i:=1 to length(str) do begin
  if str[i] in ['0'..'9'] then res:=res+str[i];
  if (not (str[i] in ['0'..'9'])) and (res <> '') and (linked=false) then break;
 end;
 if res <> '' then result:=strtoint(res) else result:=0;
end;
Bei Fragen ruhig fragen :drunken:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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