![]() |
Integer aus String mit anderen Zeichen herraussuchen
Hi!
Das ist warscheinlich eine Noobfrage, aber wie kann ich aus einem Edit eine Integer-Zahl auslesen, wenn dort noch andere Zeichen drin sind wie z.B. "%". Am besten fällt dan gleich ein etwaig vorhandenes Komma weg. Also, euer Wissen ist gefragt. :D |
Re: Integer aus String mit anderen Zeichen herraussuchen
Delphi-Quellcode:
Ungetestet! Geht nur solange keine anderen Zahlen auftauchen, und das ende der Zahl wird auch nicht bestimmt, dazu musst du das aber nur rumdrehen und vom ende an suchen...
Var PosN:Integer;
s:String; Begin PosN:=Length(s); for i:=0 to 9 do Begin If Pos(InttoStr(i),s)<PosN Then PosN:=Pos(InttoStr(i),s); End; End; |
Re: Integer aus String mit anderen Zeichen herraussuchen
Geh doch den String durch und schmeiss alles ausser den Zahlen raus.
Delphi-Quellcode:
k: char;
str: string; begin str:='666'; k:= str[1]; if (k in ['0'..'9']) then showmessage('drin'); |
Re: Integer aus String mit anderen Zeichen herraussuchen
du könntest alle zeischen des Edits durchgehen und wenn eine zahl gefunden wird merkst du dir diesen teil. Also in etwa so:
Delphi-Quellcode:
var LNumber: String;
LCount: Integer; LByte: Byte; begin LNumber := ''; for LCount := 1 to Length(Edit1.Text) do begin LByte := Byte(Edit1.Text[LCount]); if (LByte in [48..57]) then LNumber := LNumber + Char(LByte); end; if LNumber = '' then ShowMessage('Keine Zahl da') else ShowMessage(LNumber); //um das ganze als Integer zu erhalten: StrToInt(LNumber) |
Re: Integer aus String mit anderen Zeichen herraussuchen
Delphi-Quellcode:
type
TCharSet = set of Char; function StripNonConforming(const S: string; const ValidChars: TCharSet): string; var DestI: Integer; SourceI: Integer; begin SetLength(Result, Length(S)); DestI := 0; for SourceI := 1 to Length(S) do if S[SourceI] in ValidChars then begin Inc(DestI); Result[DestI] := S[SourceI] end; SetLength(Result, DestI) end; function StripNonNumeric(const S: string): string; begin Result := StripNonConforming(S, ['0'..'9']) end; |
Re: Integer aus String mit anderen Zeichen herraussuchen
Wenn man einfach nur die Zahlen rausnimmt, dann würde er auch Zahlen zusammentun, die garnicht hinternanderstehen, z.B.: "12%3".
Ich muss da sichergehen, weil es sich ja auch um den DAU handeln könnte :D. |
Re: Integer aus String mit anderen Zeichen herraussuchen
was soll denn passieren wenn jemand "12%3" eingibt?
|
Re: Integer aus String mit anderen Zeichen herraussuchen
Delphi-Quellcode:
So ich hoffe, ich habe verstanden was du möchtest und das das eine gute Antwort für dich ist.
Function ZahlAusString(ZahlString : String) : String;
var TempString : String; i, dummy : Integer; begin i := 1; TempString := ''; While i <= Length(ZahlString) do begin if TryStrToInt(Copy(ZahlString, i, 1), dummy) then //Testet ob der Wert eine Integer- Zahl TempString := TempString + Copy(ZahlString, i, 1); inc(i) end; ZahlAusString := TempString end; |
Re: Integer aus String mit anderen Zeichen herraussuchen
@CLRS530: Deine funktion macht das gleiche wie meine Auch schon, nur das ich nicht per TryStrToInt auf zahl prüfen sondern den Ascii-Code prüfe. Und anstelle von copy greife ich direkt mit "[]" auf die Zeischen zu was auch bedeutend schneller ist als erst copy zu verwenden. Letztendlich schien dies aber nicht das zu sein was der Threadsteller wollte...
|
Re: Integer aus String mit anderen Zeichen herraussuchen
Ji, das ist richtig, deine macht das gleiche, aber ich dneke mal, das meine vielleicht ein wenig lesbarer ist.
Das, das direkte zugreifen, so furchtbar viel schneller ist, wage ich mal zu verneinen und überhaupt ist das in diesem Fall total nebensächlich, da es hier nicht auf speed ankommt. Da würde ich in jedem Fall Copy benutzen. |
Re: Integer aus String mit anderen Zeichen herraussuchen
naja, ob lesbarer, schneller etc. ist ja nicht ganz so wichtig. Auf jeden fall hat der Threadsteller geschrieben
Zitat:
|
Re: Integer aus String mit anderen Zeichen herraussuchen
Wenn du davon ausgehst hast du vielleicht recht ;)
Ich muss aber sagen, das ich mir auch nicht jeden Quellcode genau durchgesehen habe und aus seiner Antwort auch keinen Meter schlau wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 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 by Thomas Breitkreuz