Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Schon wieder Stringproblem -> array of char mit Vergleich


trm - Do 08.07.10 17:52
Titel: Schon wieder Stringproblem -> array of char mit Vergleich
Hi,

irgendwie habe ich heute meine Gehirnhälften zu lange einer drehenden Dame ausgesetzt (siehe offtopic).

Folgendes möchte ich erreichen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function TForm1.HoldChars_in_Range(Dummy_String: string; Dummy_Char_Range: array of char): string;
var
  x: Integer;
begin

  { Zeichen aus dem Strings beibehalten }
  Result := '';
  showmessage(Dummy_Char_Range);
  for x := 1 to Length(Dummy_String) do
    if (Dummy_String[x] in Dummy_Char_Range) then // hier wird geschimpft, dass der Operator nicht auf den Operantentyp anwendbar ist
      Result := Result + Dummy_String[x];

end;

// Der Aufruf sollte wenn möglich so aussehen:

Dummy_String := HoldChars_in_Range(Edit1.Text, ['0'..'9' , 'A'..'Z''a'..'z']);
// hier wird wieder gemeckert, ']' erwartet, aber '..' gefunden



Bei der function verstehe ich nicht, dass der Char (string[x]) nicht in der Menge (Dummy_Char_Range) vorkommen darf?
Und bei dem Aufruf an sich sollte das doch auch wieder eine Menge, also ein Array sein.

Gruß
~Mathias


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 08.07.2010 um 18:17


elundril - Do 08.07.10 17:54

nimm statt array of char lieber Set of Char. dann sollte es gehen. der in-Operator funktioniert in D7 nämlich nur mit Sets.

lg elundril


trm - Do 08.07.10 18:08

Huhu,
Danke, aber Set of ist doch nicht in der Funktion anwendbar - das ist doch eine Menge, die ich vorher definieren muss?
Dann ist aber die schöne Dynamik hin :(

OMG, es ist wirklich warm draussen.
Danke für den Hinweis, habs gelöst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type
  TChar_Range=set of Char;


function TForm1.HoldChars_in_Range(Dummy_String: string; Dummy_Char_Range:TChar_Range): string;
var
  x: Integer;
begin

  { Zeichen aus dem Strings beibehalten }
  Result := '';
  for x := 1 to Length(Dummy_String) do
    if (Dummy_String[x] in (Dummy_Char_Range)) then
      Result := Result + Dummy_String[x];

end;

Aufruf bleibt gleich.


Sorry für die weitere Banalität :/


Teekeks - Do 08.07.10 18:14

Ein Set ist eine Menge.
Probiers doch mal:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var se:set of char;
            s:string;
            e:string;
            i:integer;
begin
  s:='123Hal323lo565';
  se:=['a'..'z','A'..'Z'];
  e:='';
  for i:=1 to length(s) do
    if s[i] in se then
      e:=e+s[i];
  Writeln(e); //ergebniss: Hallo
end;


trm - Do 08.07.10 18:16

Huch, Du warst zu schnell.


ASMFreak - Do 08.07.10 22:09

Mathias,

probier 'mal


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  TMyCharSet = set of Char;

function HoldChars_in_Range(Dummy_String; Dummy_Char_Range: TMyCharSet): String;
  var
    X: Integer;
begin
  Result := '';
  for X := 1 to Length(Dummy_String) do
    if (Dummy_String[X] in Dummy_Char_Range) then
      Result := Result + Dummy_String[X];
end;


Dass der Compiler meckert, wundert mich nicht! "in" ist ein Mengenoperator und Du übergibst als Argument ein Array!

Gruß, Trutz


Hoppla, da war ein Tag zu viel! Und Rechtschreibung kann ich auch nicht mehr!
Und wohl auch ein Gals Rotwein zu viel, sonst hätte ich gemerkt, dass das Problem schon gelöst ist! :nut:


trm - Do 08.07.10 22:37

Hihi (kurz und bündig).

Danke dennoch.