Nur Zahlen aus einem String zulassen
Moin die Herren (und Damen?),
ich steh irgendwie auf der Leitung. Sorry, falls das Thema schon mal behandelt worden ist (bin mir fast sicher) ich hab nen Eingangsstring, wo Zahlen UND Buchstaben drin sind. Der Ausgangsstring soll NUR die Zahlen davon beinhalten. :gruebel: :?: Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Mach ne Schelife über die Zeichen und Kopiere wenn Zahl in den Zielstring
|
Re: Nur Zahlen aus einem String zulassen
Hai emsländer,
meinst Du das aus 15AB89 dann ein String 1589 wird? Im einfachsten Fall einfach mit einer Schleife über den String gehen und nur die Zeichen die im Set ['0'..'9'] sind an einen neuen String anhängen. |
Re: Nur Zahlen aus einem String zulassen
Zitat:
Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Zitat:
Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Wenn es nicht arg kritisch ist mit der Performance, würde ich auch Zeichen für Zeichen durch den String wandeln und die Ziffern kopieren. Falls das mit dem Kopieren keine gute Idee ist, kannst Du auch alle "nicht-Ziffern" mit #0 überschreiben und dann am Ende einmalig etwas wie "text:= StringReplace( text, string(#0), '', [rfReplaceAll])" aufrufen.
Ansonsten könntest Du Dir auch eine der Bibliotheken für reguläre Ausdrücke schnappen und dann etwas schreiben, das aussieht wie: $text = preg_replace( '/[^0-9]/', '', $text ); |
Re: Nur Zahlen aus einem String zulassen
Weil schönes Wetter ist (wo auch immer)
Delphi-Quellcode:
type
TSetofChars = Set of Char; function OnlyNumbersInString (const aValue : String; aChars : TSetofChars) : String; var i: Integer; newString : string; begin newString := ''; for i := 0 to Length(aValue) do begin if aValue[i] in aChars then begin newString := newString + aValue[i]; end; end; result := newString; end; procedure TForm1.TestButtonClick(Sender: TObject); begin Edit2.Text := OnlyNumbersInString(Edit1.Text,['0'..'9']); end; |
Re: Nur Zahlen aus einem String zulassen
Hallo
Ihr solltet das nicht mit + machen sondern in place und dann einfach mit SetLength kürzen! :shock: Liebe Grüsse Laufi |
Re: Nur Zahlen aus einem String zulassen
Hai Laufi,
der Code soll das Prinzip zeigen. Über Optimierung mache ich mir da nie gedanken wenn ich so etwas mal schnell hier im Editor runtertippe. |
Re: Nur Zahlen aus einem String zulassen
optimiert würde ich es dann so machen:
Delphi-Quellcode:
procedure OnlyNumbersInString(var aValue: String; aChars: TSetofChars);
var i, j: Integer; begin j := 0; for i := 1 to Length(aValue) do begin if (aValue[i] in aChars) then begin inc(j); aValue[j] = aValue[i]; end; end; SetLength(aValue, j); end; |
Re: Nur Zahlen aus einem String zulassen
Hallo Sharky
Ja ist gut ich wollte dich auch nicht kritisieren ich wollte nur nicht das man es dann falsch lernt weul viele machen es falsch :) Liebe Grüsse Laufi |
Re: Nur Zahlen aus einem String zulassen
Hi,
könntest Du kurz erklären warum? Ich gehöre zu den Leuten, die es (noch) falsch machen ;) |
Re: Nur Zahlen aus einem String zulassen
Hi,
dieses ,['0'..'9']); könnte man doch in die Funktion selbst einbringen? Denn die Funktion soll ja nur Zahlen rückliefern.... Dann hieße es nur noch:
Delphi-Quellcode:
ansonsten Danke für die Hilfe!
procedure TForm1.TestButtonClick(Sender: TObject);
begin Edit2.Text := OnlyNumbersInString(Edit1.Text); end; Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Klar, was spricht dagegen?
|
Re: Nur Zahlen aus einem String zulassen
Zitat:
Siehe dazu die Ergebnisse u.a. aus diesem Thread: http://www.delphipraxis.net/internal...t.php?t=130996 |
Re: Nur Zahlen aus einem String zulassen
Ja also man sollte aufpassen dass die länge von Strings und Arrays nur wenn wirklick notwendig geändert wird weil bei grössenänderungen normalerweise neuer speicher angefordert wird wenn es nicht gepuffert ist und die bytes kopiert werden müssen :)
Liebe Grüsse Laufi |
Re: Nur Zahlen aus einem String zulassen
Hi,
kleines Problem: der Compiler meckert das an: aValue[j] := aValue[i]; Der Linken Seite kann nichts zugewiesen werden. ich hab das Ding jetzt so eingebaut:
Delphi-Quellcode:
Gruss
function OnlyNumbersInString (const aValue : String) : String;
var i, j: integer; aChars : TSetofChars; begin aChars := ['0'..'9']; j := 0; for i := 1 to Length(aValue) do begin if (aValue[i] in aChars) then begin inc(j); aValue[j] := aValue[i]; end; end; SetLength(aValue, j); end; EL |
Re: Nur Zahlen aus einem String zulassen
const aValue : String
versuche mal
Delphi-Quellcode:
Grüße
var aValue:String
Klaus |
Re: Nur Zahlen aus einem String zulassen
schau dir nochmal genau an was ich da geschrieben habe. Bei mir ist es auch keine Funktion mehr sondern eine Procedure.
|
Re: Nur Zahlen aus einem String zulassen
Zitat:
Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Das
Delphi-Quellcode:
mit dem Austauschen:
function OnlyNumbersInString (const aValue : String) : String;
Delphi-Quellcode:
Zug angekommen? :zwinker:
procedure OnlyNumbersInString(var aValue : String);
|
Re: Nur Zahlen aus einem String zulassen
besser so:
Delphi-Quellcode:
mit dem Austauschen:
function OnlyNumbersInString (const aValue : String) : String;
Delphi-Quellcode:
procedure OnlyNumbersInString(var aValue : String);
|
Re: Nur Zahlen aus einem String zulassen
Zitat:
schon kapiert...... war ne Vollmondnacht.... :wall: :wall: :wall: Vielen Dank Gruss EL |
Re: Nur Zahlen aus einem String zulassen
Da das ganze ein Funktion sein soll,
sollte diese auch etwas zurückgeben.
Delphi-Quellcode:
.. dann kannst Du das const in der Parameterlist auch
function OnlyNumbersInString (const aValue : String) : String;
var i: integer; aChars : TSetofChars; begin aChars := ['0'..'9']; result :=''; for i := 1 to Length(aValue) do begin if (aValue[i] in aChars) then begin result := result + aValue[i]; end; end; end; stehen lassen. Grüße Klus |
Re: Nur Zahlen aus einem String zulassen
dann würde ich es widerum so machen:
Delphi-Quellcode:
function OnlyNumbersInString(aValue: String): String;
var i, j: integer; aChars : TSetofChars; begin aChars := ['0'..'9']; j := 0; for i := 1 to Length(aValue) do begin if (aValue[i] in aChars) then begin inc(j); aValue[j] := aValue[i]; end; end; //Variante1 SetLength(aValue, j); result := aValue; //Variante2 result := copy(aValue, 1, j); end; |
Re: Nur Zahlen aus einem String zulassen
ich habe das so gelöst:
Delphi-Quellcode:
strOld := 'abe02356';
for i:=0 to Length(strOld) do begin if strOld[i] in ['0'..'9'] then strNew := strNew + strOld[i]; end; |
Re: Nur Zahlen aus einem String zulassen
Na gut, dann bring ich auch noch einen:
Delphi-Quellcode:
function OnlyNumbersInString(const aValue: String): String;
const aChars = ['0'..'9']; var i, j: integer; begin SetLength(Result,Length(aValue)); j := 0; for i := 1 to Length(aValue) do begin if (aValue[i] in aChars) then begin inc(j); Result[j] := aValue[i]; end; end; SetLength(Result, j); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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