AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlen in einem String finden

Ein Thema von ATS3788 · begonnen am 22. Nov 2012 · letzter Beitrag vom 23. Nov 2012
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 10:20
Hallo
Gibt es eine elegante "procedure"
um Zahlen in einen String zu finden
Du kannst dir eine RegEx-Lib für Delphi besorgen und dann mit "/[0-9]{1,}(?:[\,\. ]?[0-9])*/" (oder so ähnlich) alle Zahlen extrahieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 10:52
Du kannst dir eine RegEx-Lib für Delphi besorgen
Die ist (ich glaub seit XE) schon im Delphi mit dabei.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#3

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 16:23
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.
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 16:38
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.
Wenn du mal ein konkretes Beispiel geben würdest (was geht rein, was soll rauskommen) dann könnten wir dir auch etwas konkretes zeigen. So ist das aber zu schwammig.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#5

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 16:44
Delphi-Quellcode:
function CountNumber(const Str: string): tNumArray;
var
i,a : integer;
begin
   FillChar(Result , SizeOf(tNumArray) , 0);
   a := 0;
   for i := 1 to length(Str) do
   if (ord(Str[i]) >= 48) and (ord(Str[i]) <= 57) then begin
     Result[a] := StrToInt(Str[i]);
     inc(a);
   end;
end;
Also habe das so gemacht, geht echt gut
ist aber nicht "ELEGANT"

Wie komme ich darauf. In C++ geht vieles,
laßt mich sagen anders. Manches dort ist
"ELEGANT" anderes einfach schwer zu lesen,
dedewegen liebe ich Delphi
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 17:10
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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 16:44
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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 17:07
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 TNumberEvent könnte auch ein Integer sein, aber dann besteht die Gefahr des Überlaufs.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zahlen in einem String finden

  Alt 22. Nov 2012, 17:10
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (22. Nov 2012 um 17:24 Uhr) Grund: Assigned-Abfrage eingefügt
  Mit Zitat antworten Zitat
BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: Zahlen in einem String finden

  Alt 23. Nov 2012, 00:23
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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