Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Irgendein Zeichen


Jaegermeister1992 - Di 10.11.09 18:33
Titel: Irgendein Zeichen
In Visual Basic gibt es eine Funktion wo man ein Zeichen (z.b. x) durch ? ersetzen kann somit wäre:
Ha??o = Hallo gibt es sowas für Delphi auch?
mfg Jo


elundril - Di 10.11.09 18:35

StringReplace() ist die Funktion die du suchst, denk ich. Einfach mal eingeben und F1 drücken.

lg elundril


Jaegermeister1992 - Di 10.11.09 18:42

NEin damit kann man nur strings ersetzen ich möchte aber sozusagen wie in VB durch ein ? iein Zeichen ersetzen in Falle meines Bsp. die 2 o des wortes Hallo


FinnO - Di 10.11.09 19:00

ja.

Stringreplace.


Delphi-Quelltext
1:
  String := stringReplace('Ha??o','?','l',[rfReplaceAll]);                    


Critter - Di 10.11.09 19:02

Hi,
user profile iconJaegermeister1992 hat folgendes geschrieben Zum zitierten Posting springen:
NEin damit kann man nur strings ersetzen ich möchte aber sozusagen wie in VB durch ein ? iein Zeichen ersetzen in Falle meines Bsp. die 2 o des wortes Hallo


du bist aber schnell mit deinem Nein. Strings sind eine Aneinanderreihung von Zeichen. Während also 'x' ein Zeichen ist ist 'Hallo' ein String. Allerdings gibt es auch Strings der Länge 1 (im unteren Beispiel '?' und 'l'), welche du in diesem Fall wie ein Zeichen nutzen kannst.

Wenn ich deine Frage richtig verstanden habe suchst du so etwas, womit user profile iconelundril ritig gelegen hätte (einfach mal in das Button Klick auf einem Leeren From eingeben):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
  Var
    Eingabe, Ergebnis : string;
begin
  Eingabe := 'Ha??o';
  Ergebnis := StringReplace(Eingabe, '?''l', [rfReplaceAll]);
  ShowMessage(Ergebnis);
end;


critter


Jaegermeister1992 - Di 10.11.09 19:08

OK Sry ich glaube ich hab mein Problem ein wenig zu umständlich beschrieben diese ? steht in Basic für ein beliebigen buchstaben Somit ist Hallo = Ha??O es könne aber auch HaTTo oder Hasso richtig sein also ich suche ein Zeichen das sozusagen alles ist wie eine Leerstelle es ist schwer zu beschreiben;-)
mfg Jo


FinnO - Di 10.11.09 19:13

also ein Wildcard (oder so?!)?


Critter - Di 10.11.09 19:13

Hi,

was soll denn dann mit diesem Zeichen geschehen? Irgendwann musst du es doch gegen irgend etwas ersetzen - oder? Ich habe den Sinn des Platzhalters noch nicht verstanden.

critter


Jaegermeister1992 - Di 10.11.09 19:16

genau Wildcards, so hieß des dange;-)
wie mache ich dies jetzt genau?


Jaegermeister1992 - Di 10.11.09 19:21


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
function Matchstrings(Source, pattern: string): Boolean;
var
  pSource: array [0..255of Char;
  pPattern: array [0..255of Char;

  function MatchPattern(element, pattern: PChar): Boolean;

    function IsPatternWild(pattern: PChar): Boolean;
    var
      t: Integer;
    begin
      Result := StrScan(pattern, '*') <> nil;
      if not Result then Result := StrScan(pattern, '?') <> nil;
    end;
  begin
    if 0 = StrComp(pattern, '*'then
      Result := True
    else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
      Result := False
    else if element^ = Chr(0then
      Result := True
    else 
    begin
      case pattern^ of
        '*'if MatchPattern(element, @pattern[1]) then
            Result := True
          else
            Result := MatchPattern(@element[1], pattern);
          '?': Result := MatchPattern(@element[1], @pattern[1]);
        else
          if element^ = pattern^ then
            Result := MatchPattern(@element[1], @pattern[1])
          else
            Result := False;
      end;
    end;
  end;
begin
  StrPCopy(pSource, Source);
  StrPCopy(pPattern, pattern);
  Result := MatchPattern(pSource, pPattern);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Matchstrings('Sean Stanley''Sean*'then ShowMessage('strings match!');
  if Matchstrings('Sean''Se?n'then ShowMessage('strings match!');
  if not Matchstrings('Sean''Se?nn'then ShowMessage('strings don''t match!');
end;




Moderiert von user profile iconKlabautermann: Delphi-Tags eingefügt.


Jaegermeister1992 - Di 10.11.09 19:32

Blos dies kann ich auf des was ich vorhabe anwenden!


Delphi-Quelltext
1:
iFound:=C1.Items.IndexOf('?("Hier könnte B,R,G,Y stehen")-1');                    



Somit sollen in der C1 - Liste nach B-1 nach R-1 nach G-1 und nach Y-1 stehen in der List könnten auch wenn dann nur diese 4 buchstaben vorne stehen!

Wie kann ich des verwirklichen?

Moderiert von user profile iconKlabautermann: Delphi-Tags eingefügt.


Lannes - Di 10.11.09 20:41

Hallo,

hier im Forum gibt es Delphi-BBCode-Tags für Code, nutze die bitte, so sieht das grauselig aus :wink:

Items.IndexOf vergleicht nur den vollständigen String der Items mit dem übergebenen String.

Etwa so sollte es mit einer Schleife realisierbar sein:

Delphi-Quelltext
1:
2:
3:
for z := 0 to Pred(C1.Count) do
  if Matchstrings(C1.Item[z], 'Sean*'then 
    ShowMessage('strings match! in Item: '+IntToStr(z));


//edit: man kann den letzten Beitrag editieren, musst nich immer einen Neuen anlegen.