AGB  ·  Datenschutz  ·  Impressum  







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

Zahlen aus String extrahieren

Ein Thema von youuu · begonnen am 30. Sep 2010 · letzter Beitrag vom 22. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

Zahlen aus String extrahieren

  Alt 30. Sep 2010, 09:20
Hi,

wie kann ich z.B bei "asj231k1-.21oa=" alle Zahlen extrahieren, existietr dafür schon eine Methode oder muss ich mich ran setzen und eine selber dafür schreiben?
Steven
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 09:36
Mal schnell zusammengeflickt....

Delphi-Quellcode:
function ExtractNumbers(s : String) : String;
var i : Integer;
begin
 Result := '';
 for i := 1 to length(s) do
  if s[i] in ['0'..'9'] then Result := Result + s[i]
end;
Könntest auch zuerst alle Nicht-Zahlen aus dem String löschen und dann den "Reststring" dem Result zuordnen.
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 15:30
Was meinst du mit alle Zahlen extrahieren?
- einen String ohne Fremdzeichen "231121"
- alle Zahlen(gruppen) einzeln "231", "1" und "21"
- ...
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
226 Beiträge
 
Delphi XE4 Enterprise
 
#4

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 15:34
Hatten wir da nicht unlängst was...?

http://www.delphipraxis.net/153869-s...ml#post1043095
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 18:36
Sorry für die späte antwort.
Himitsu alle Zahlen meinte ich nicht gruppiert oder sonstiges.

Ich versuch nachher gleich einmal scrat1979 Code.
Steven
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 18:53
Moin,
[...]Himitsu alle Zahlen meinte ich nicht gruppiert oder sonstiges.[...]
Das sollte dann funktionieren. Der Code von scrat ergibt Himitsus erste Variante (231121). Den musst du nur noch in einen Integer umwandeln.

Das ist ein andere Level (allgemein die Funktionen die da stehen). Die hier genannte Funktion geht jedes Zeichen durch, guckt ob es valid ist und fügt es zusammen.

Nichts gegen dich youuu.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zahlen aus String extrahieren

  Alt 30. Sep 2010, 22:18
Das ist ein andere Level (allgemein die Funktionen die da stehen). Die hier genannte Funktion geht jedes Zeichen durch, guckt ob es valid ist und fügt es zusammen.

Nichts gegen dich youuu.

MfG
Fabian
Ich persönlich halte die dort genannte Funktion für etwas Overkill, um "nur" z.B. bei einer Eingabe die ungültigen Zahlen herauszufilter. Ich denke, da merkt man den Geschwindigkeitsunterschied bestimmt nicht. Warum einfach wenn's auch kompliziert geht. Auch wenn ich sagen muss, dass die dort genannte Funktion "schon was hat" Aber ich denke, meine Funktion ist übersichtlich, leicht verständlich und tut ihren Zweck...
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zahlen aus String extrahieren

  Alt 1. Okt 2010, 02:32
Ich persönlich halte die dort genannte Funktion für etwas Overkill, um "nur" z.B. bei einer Eingabe die ungültigen Zahlen herauszufilter.
Na gut, dort drüben war's auch 'ne etwas andere Anforderung.
- schneller
- öfters
- anderes Extraktionsmuster

Also kann man es sich nun aussuchen:
- "lösche alles, was keine Zahl ist"
Delphi-Quellcode:
function GetNum(S: String): Integer;
var i: Integer;
begin
  for i := Length(S) downto 1 do
    if not (S[i] in ['0'..'9']) then Delete(S, i, 1);
  Result := IntToStr(S);
end;
- "hänge alle Zahlen an einen neuen String an"
(siehe scrat1979)
- "füge alle Zahlen in einen neuen String ein", bzw. "... einem neuen String zusammen"
function ExtractNumbers(s : String) : String;
Delphi-Quellcode:
var i : Integer;
begin
  Result := '';
  for i := 1 to length(s) do
    if s[i] in ['0'..'9'] then Insert(S[i], Result, MaxInt);
end;
Von den letzen beiden Varianten ist Michaels zwar 'nen "Hauch" langsamer, aber dafür bissl verständlicher.

Schneller geht es dann nur noch (wenn man es denn unbedingt braucht), indem man
- bei langen Strings alles Gewünschte/Erlaubte via PChar in einen String mit maximal zu erwartender Länge kopiert und den String dann kürzt
- bei "kurzen" Strings alles Gewünschte/Erlaubte zählt, den neuen String mit passender Länge erstellt und dann die gewünschten Teile da reinkopiert.
jenachdem was schneller geht
- die zusätzliche String- und Speicheroperation
- alles zusätzlich nochmal durchzugehn und mitzuzählen
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#9

AW: Zahlen aus String extrahieren

  Alt 21. Apr 2013, 21:22
Hallo himitsu,

nehmen wir an, daß ich aus einer Webseite Lotoozahlen kopiere und in ein Editfeld eingebe.
Dabei habe ich ein paar Zeichen mitkopiert.

Nun möchte ich gern die Lottozahlen (ein- und zweistellig) extrahieren und in ein IntegerArray schreiben...

Ich habe da was hingebogen, das auch funktioniert nicht ganz, denn bei der letzten zweistelligen Zahl wird nur die erste Ziffer angezeigt...
Gibt es da einen anderen Ansatz?

Ich füge es mal ein.
Delphi-Quellcode:
USES...
{Zahlen und Zeichen von der Zwischenablage ins Edit eingeben und bei Enter nur die Zahlen
ausgeben. Es werden die Zahlen als Integerwerte in ein IntegerArray mit 6 Indexes gespeichert
Die Zahlengröße ist auf 2 Stellen begrenzt.}



Type
  TLottoresult = array of Integer;


//----------------------------------------------
function TForm1.IsZahl(AChar:char):boolean;
begin
  result := AChar in ['0'..'9'];
end;
//----------------------------------------------

function TForm1.LZahlen(kopStr:string):TLottoresult;
var i,a:integer;
    t:string[2];
   flag:boolean;
begin
setLength(Result, 6); a := -1;
 for i:= 1 to length(kopStr) do
  begin
   if isZahl(kopstr[i])and (a < high(Result))then
    begin
     if (flag = false) {and (a < high(Result)) }then inc(a);
     t:=t+kopStr[i];
     result[a]:=strtoint(t);
     flag:=true;
    end else
    begin
      flag:=false; t:='';
    end;
  end;
Label2.Caption:= 'IntegerArrayIndexes: '+ inttostr(a);
Label3.caption:=' Es fehlen noch '+ inttostr((high(Result)- a))+ ' Zahlen';
end;

//----------------------------------------------



procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
 Lottoresult:TLottoresult;
 i:integer;
 str:string;
begin
{bei Enter das Array auslesen und die Zahlen mit Leerzeichen ausgeben}
 if Key = VK_Return then
   begin
    LottoResult := LZahlen(Edit1.text);
     for i := 0 to high(LottoResult) do
       str := str + ' ' + IntToStr(LottoResult[i]);
    Label1.Caption:='String mit Zahlen: '+str;
   end;
end;
Im Anhang ein Schnappschuss, das den Fehler zeigt
Miniaturansicht angehängter Grafiken
proggi.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Zahlen aus String extrahieren

  Alt 21. Apr 2013, 22:43
Delphi-Quellcode:
begin
  t:='';
  flag:=false;
  setLength(Result, 6); a := -1;
  for i:= 1 to length(kopStr) do
   begin
    if isZahl(kopstr[i])and (a <= high(Result))then
    begin
      if not(flag) {and (a < high(Result)) }then inc(a);
      t:=t+kopStr[i];
      result[a]:=strtoint(t);
      flag:=true;
     end else
     begin
       flag:=false;
       t:='';
     end;
   end;
Tip am Rande mit [F7]/[F8] eine Kleinigkeit.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:49 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