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,
Jaegermeister1992 hat folgendes geschrieben : |
| 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
elundril 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..255] of Char; pPattern: array [0..255] of 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(0) then 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
Klabautermann: 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
Klabautermann: 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!