Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pos und Delete (https://www.delphipraxis.net/137117-pos-und-delete.html)

youuu 14. Jul 2009 18:50


Pos und Delete
 
Hi,

Ich habe einen String z.B.:

S:= 'Umsatz: 88€'

und ich möchte nun nur den Betrag filtern.

S2:= '88';

Wie kann ich das am besten realisieren.

Ich hab an Pos und delete gedacht, allerdings hab ich damit noch nicht wirklich gearbeitet.

Klaus01 14. Jul 2009 19:03

Re: Pos und Delete
 
Guten Abend,

ist der String immer so aufgebaut?
Also vor dem Betrag ein Leerzeichen und nach dem Betrag
ein € Zeichen?

Grüße
Klaus

Satty67 14. Jul 2009 19:04

Re: Pos und Delete
 
Als erstes prüfen, ob der Such-String identifiziert werden kann (in deinem Fall nicht, Beträge sind immer anders), dann also immer gültige Begrenzung ermitteln:

Betrag folgt (hoffentlich) immer nach einem Doppelpunkt. Also alles bis zum Doppelpunkt löschen:
Delphi-Quellcode:
S := 'Umsatz: 88€'
Delete(S, 1, Pos(':', S));
Jetzt hast Du " 88€" als Rest-String. Sofern es immer €-Beträge sind:
Delphi-Quellcode:
Delete(S, Pos('€', S), 1024);
Die 1024 ist hier nur, um nicht die Länge des String ermitteln zu müssen.

Rest-String ist jetzt " 88", also noch Leerzeichen weg:
Delphi-Quellcode:
S := Trim(S);
Die vorgehensweise hat einen Haken... Abweichungen beim Ausgangsstring werden nicht so leicht weggesteckt. Also sicherstellen, dass : und € vorhanden sind, ist schonmal Pflicht.

Mithrandir 14. Jul 2009 19:25

Re: Pos und Delete
 
Zitat:

Zitat von Satty67
Die 1024 ist hier nur, um nicht die Länge des String ermitteln zu müssen.

Was bedeutet, das Beträge mit mehr als 1023 Stellen falsch wiedergegeben werden. :mrgreen:

Ganz ehrlich: Was spricht hier gegen eine Verwendung von Length? Die zusätzliche CPU-Zeit dürfte kaum der Grund sein.

//Nachtrag: Eine Alternative wäre die Verwendung von TPerlRegEx mit einer Regex, die nur auf numerische Zeichen anspringt, evtl. noch auf ".,-"...

Andreas L. 14. Jul 2009 19:36

Re: Pos und Delete
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Satty67
Die 1024 ist hier nur, um nicht die Länge des String ermitteln zu müssen.

Was bedeutet, das Beträge mit mehr als 1023 Stellen falsch wiedergegeben werden. :mrgreen:

MaxInt verwenden :mrgreen: Ist bestimmt auch schneller als Length, oder?

youuu 14. Jul 2009 19:40

Re: Pos und Delete
 
Ja String ist definitive immer gleich.

Danke euch ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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