Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringfilter (https://www.delphipraxis.net/136298-stringfilter.html)

blooddog_90 27. Jun 2009 16:55


Stringfilter
 
Guten Tag alle zusammen :lol:

Ich bin auf der Suche nach einer Möglichkeit, die es mir erlaubt mehrere Strings zu filtern.
Sowas braucht man zum Beispiel bei Namensvorschriften.

Wenn es in einem Programm also nicht erlaubt ist, bei der Eingabe Leerzeichen, Tabs oder Umlaute zuverwenden.

Also dachte ich mir, da gibt es doch bestimmt irgendwas, was mir einen String daraufhin überprüft ob eines dieser Zeichen vorhanden ist. Gibt es denn sowas auch?

Code Schnipsel die mir dazu einfallen (aka Pseudocode):

Delphi-Quellcode:
var
sWort: string;
bContains: boolean;
aStrings: array [0..4] of string;

begin
aStrings := (' ','_','Ä','-');
sWort := edit1.text;
bContains := FilterFunction(sWort,aStrings);
end;
Und ich suche eben jetzt nach einer Function, die mir sowas erledigt wie "FilterFunction" und einen Wahrheitswert zurückliefert. Existiert sowas bereits?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

polarwolf 27. Jun 2009 17:29

Re: Stringfilter
 
Da du geschrieben hast Namensvorschriften. Ich habe es mal so probiert.

Delphi-Quellcode:
function Filter(text: string):Boolean;
var
  i:integer;
  Buchstabe:string;
begin
  result:=false;
  for i := 1 to Length(text) do
  begin
    Buchstabe:=(Copy (text, i, 1));
    if Buchstabe = 'Ä' then
    begin
      result:=true;
      break;
    end;
  end;
end;
Aufruf:

Delphi-Quellcode:
Filter(text);
Wenn meine wege doch meistens umständlich sind. sie funktionieren wenigstens.
hat jemand dafür eine schönere Funktion ?

Oreaden 27. Jun 2009 17:43

Re: Stringfilter
 
Wie wär es damit?
Delphi-Quellcode:
function f(s, a: string): boolean;
var
  c: char;
begin
  result := false;
  if (length(s) = 0) or (length(a) = 0) then exit;
  for c in s do
    if pos(c, a) > 0 then
    begin
      result := true;
      exit;
    end;
end;

Aphton 27. Jun 2009 17:47

Re: Stringfilter
 
Delphi-Quellcode:
// Code
procedure FilterText( var Text: String; const BadChars: Array of Char );
var
  i, j: Integer;
  x: Boolean;
begin
  i := 1;
  while i <= Length( Text ) do
  begin
    x := True;
    for j := 0 to High(BadChars) do
      if Text[i] = BadChars[j] then
      begin
        while Text[i] = BadChars[j] do
          Delete( Text, i, 1 );
        x := False;
      end;
    if x then
      inc( i );
  end;
end;

// Beispielsaufruf
  str := '-;:#TestString Blabla #@';
  FilterText( str, [ '-', ',', ':', '#', '@' ] );

himitsu 27. Jun 2009 19:45

Re: Stringfilter
 
Delphi-Quellcode:
procedure FilterText( var Text: String; BadChars: Set of Char );
var
  i: Integer;
begin
  for i := Length(Text) downto 1 do
    if Text[i] in BadChars then
      Delete(Text, i, 1);
end;
Aufruf wie schon bei Aphton

Lannes 27. Jun 2009 20:50

Re: Stringfilter
 
Hallo,

Du könntest die Zeichen auch schon bei der Eingabe ausschließen.

Oreaden 27. Jun 2009 21:41

Re: Stringfilter
 
Seit gegrüßed himitsu,

Ihr wießed doch, dass Eurer Code nur bis D2007 gültig ist, da ein Char ab D2009 mehr als 255 Bits umfassen kann...

Schöne Grüße
Oreaden

Dipl Phys Ernst Winter 27. Jun 2009 21:56

Re: Stringfilter
 
"Oreaden"
Zitat:

function f(s, a: string): boolean;
Sehr aussagekräftig! Ich kann mir darunter jede Funktion zum testen eines Strings vorstellen.

Oreaden 27. Jun 2009 22:00

Re: Stringfilter
 
Zitat:

Zitat von Dipl Phys Ernst Winter
"Oreaden"
Zitat:

function f(s, a: string): boolean;
Sehr aussagekräftig! Ich kann mir darunter jede Funktion zum testen eines Strings vorstellen.

juten morgen Ernst Winter,

yep, der bezug geht aus dem kontext hervor. wenn die funktion jedoch ohne kontext in der lib abgelegt wird, so wie deine vorschläge dann tut man sich mit der interpretation doch sehr schwer. daher war meine bitte an dich, es auch zu dokumentieren...

hier habe ich bewusst, deinen style genommen um zu zeigen, dass die kürze und prägnanz der funktion nicht nur vorteile hat.

einfach mal zum nachdenken.

Oreaden

Neutral General 28. Jun 2009 01:21

Re: Stringfilter
 
Zitat:

Zitat von Oreaden
Seit gegrüßed himitsu,

Ihr wießed doch, dass Eurer Code nur bis D2007 gültig ist, da ein Char ab D2009 mehr als 255 Bits umfassen kann...

Schöne Grüße
Oreaden

Da mir grad langweilig ist... 255 Bits = fast 32 Bytes. Selbst in Delphi 2009 ist ein Char nur 2 Bytes groß ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Seite 1 von 2  1 2      

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