Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Zahlen in einem String finden (https://www.delphipraxis.net/171731-zahlen-einem-string-finden.html)

nuclearping 22. Nov 2012 16:44

AW: Zahlen in einem String finden
 
Zitat:

Zitat von ATS3788 (Beitrag 1192428)
Danke, Danke

Gut zu wissen das es leider nicht elegant geht.

Manchmal sieht mir hier so geniale Lösungen
wo man sich sagt, Oh das war aber klug.

Im Grunde brauchst du nichtmal Ord. Du brauchst nur 'ne Schleife:
Delphi-Quellcode:
var
 sInput, sOutput: String;
 i: Integer;
begin
  sInput := 'abc1def6q3uz3sdd8as2';
  sOutput := '';
  for i := 1 to Length(sInput) do
    if sInput[i] in ['0'..'9'] then
      sOutput := sOutput + sInput[i];
end;

shmia 22. Nov 2012 17:07

AW: Zahlen in einem String finden
 
Also Elegant wäre ein Callback (Event) zu verwenden.
Delphi-Quellcode:
TNumberEvent = procedure(const number:string) of object;
procedure ExtractNumbers(const s : string; callback :TNumberEvent);
begin
  if not Assigned(callback) then Exit;
  // Rest ist Hausaufgabe
end;
Das Argument von
Delphi-Quellcode:
TNumberEvent
könnte auch ein Integer sein, aber dann besteht die Gefahr des Überlaufs.

himitsu 22. Nov 2012 17:10

AW: Zahlen in einem String finden
 
Wobei ich mich erstmal gefragt hatte, was tNumArray sein soll.

PS:
Delphi-Quellcode:
if (ord(Str[i]) >= 48) and (ord(Str[i]) <= 57) then begin

if (Str[i] >= '0') and (Str[i] <= '9') then begin

if CharInSet(Str[i], ['0'..'9']) then begin // früher if Str[i] in ['0'..'9'] then begin

DeddyH 22. Nov 2012 17:10

AW: Zahlen in einem String finden
 
Einen hab ich auch noch (im Editor getippt, daher ohne jede Gewähr):
Delphi-Quellcode:
function CountNumber(const Str: string): tNumArray;
const
  MIN_NUMINDEX = $30;
var
  ArrIndex: integer;
  p: PChar;
begin
  SetLength(Result, Length(Str));
  ArrIndex := 0;
  p := PChar(Str);
  if Assigned(p) then
    begin
      while p^ <> #0 do
        begin
          {$IFDEF UNICODE}
          if CharInSet(p^, ['0'..'9']) then
          {$ELSE}
          if p^ in ['0'..'9'] then
          {$ENDIF} 
            begin
              Result[ArrIndex] := Ord(p^) - MIN_NUMINDEX;
              inc(ArrIndex);
            end;
          p := CharNext(p);
        end;
      SetLength(Result, ArrIndex);  
    end;
end;

BoolString 23. Nov 2012 00:23

AW: Zahlen in einem String finden
 
Vielleicht so etwas?

Extract nth number from string

Ist sicherlich nicht ganz nah dran an elegant, aber war mal mehr für Ausbildungszwecke gedacht im Bereich Zustände/Zustandsmaschinen...
Bietet aber die Option Integer und Floatwerte zu extrahieren, optional negative Zahlen zuzulassen, etc...

Jan

Furtbichler 23. Nov 2012 07:01

AW: Zahlen in einem String finden
 
Was versteht der Fragesteller eigentlich unter 'ELEGANT'?
Wo ist der Unterschied zu 'elegant' (klein geschrieben)
Meint er 'Kompakt'?

Delphi-Quellcode:
for c in s do
  if IsDigit(c) Then
    result.add(ord(c)-48);
Wäre jetzt das "ELEGANT"este, was mir einfällt.

Sir Rufo 23. Nov 2012 07:57

AW: Zahlen in einem String finden
 
Ich muss beim Schreiben anscheinend eine Wolldecke im Mund haben :roll:

Bislang habe ich noch nicht gesehen, was rein- und rauskommen soll. Nur irgendwelchen Code, wo die Typbezeichnungen etwas anderes suggerieren als der Code wirklich liefern kann (ich beziehe mich auf den TE).

Wenn ich als Eingabeparameter einen String habe und die Funktion CountNumber heißt, dann würde ich als Ergebnis ein Integer erwarten der mir die Anzahl der Zahlen in dem String liefert.
Diese Funktion liefert aber ein NumArray (ein Array von Zahlen) zurück.

Ok, es sollen also Zahlen zurückgegeben werden.

Schaue ich mir den Code an, dann stelle ich fest, dass
  • Das Ausgabearray genausoviele Einträge hat, wie der String Stellen hat, aber es sind nicht unbedingt alle Elemente befüllt
  • obwohl mir Zahlen in einem String suggeriert werden bekomme ich aber nur die einzelnen Ziffern aus dem string als Zahl geliefert
Code:
a35s4 => (3,5,4,0,0)
Irgendwie hätte ich jetzt das erwartet
Code:
a35s4 => (35,4)
Evtl. kann mir mal jemand (der TE) eine Kerze anzünden und mich erleuchten

DeddyH 23. Nov 2012 08:15

AW: Zahlen in einem String finden
 
Anhand seines Beispielcodes gehe ich bislang davon aus, dass er ein Array aus Ziffern befüllen möchte.

Sir Rufo 23. Nov 2012 08:17

AW: Zahlen in einem String finden
 
Zitat:

Zitat von DeddyH (Beitrag 1192538)
Anhand seines Beispielcodes gehe ich bislang davon aus, dass er ein Array aus Ziffern befüllen möchte.

Das passt aber nicht zur Fragestellung (Zahlen in einem String finden) ;)
TNumArray passt zur Fragestellung, aber das darin enthaltene Ergebnis wiederum in keinster Weise

Es kann doch nicht zuviel verlangt sein, wenn man eine kleine Textzeile als Erklärung erwartet.
Die Vorlage habe ich ja gegeben

p80286 23. Nov 2012 10:16

AW: Zahlen in einem String finden
 
ich denke er möchte so etwas machen
Delphi-Quellcode:
myarray = array [0..255] of integer;

fillchar(myarray,sizeof(myarray),#0);
for i:=1 to length(mystring) do
  inc(myarray[byte(mystring[i]),1)];

for i:=byte('0') to i:=byte('9') do
  writeln(char(i)+' '+inttostr(myarray[i]);
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.
Seite 2 von 3     12 3      

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