![]() |
Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Habe ein String Array mit Steuerzeichen-Strings:
Code:
Wie kann ich den String in ein echtes Steuerzeichen umwandeln um zb. folgendes machen zu können
const
sZeichen : Array [1..3] of String = ('#128064', '#128125', '#128148');
Code:
Und sol wollte ich es anwenden, was aber nicht funktioniert:
sText := StringReplace(sText, #128064, '', [rfReplaceAll, rfIgnoreCase]); // funktioniert
Code:
Was mache ich falsch?
for i := Low(sZeichen) to High(sZeichen) do
begin sText := StringReplace(sText, sZeichen[i], '', [rfReplaceAll, rfIgnoreCase]); // funktioniert natürlich nicht, weil String sText := StringReplace(sText, PChar(sZeichen[i]), '', [rfReplaceAll, rfIgnoreCase]); // funktioniert nicht sText := StringReplace(sText, PAnsiChar(AnsiString(sZeichen[i]), '', [rfReplaceAll, rfIgnoreCase]); // funktioniert auch nicht end; |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Die Drei Zeichen #128064, #128125 und #128148 stehen für "Eyes", "EXTRATERRESTRIAL ALIEN 👽 und "Broken heart". Was machst du für okkulte Sachen :shock:
Dein Array "sZeichen" ist falsch. Sie enthalten drei Strings wie z.B. "#128064". Das ist ein Text mit mehreren Zeichen. Du möchtest aber nur drei Zeichen mit der Nummer 128064 usw aus dem String entfernen. Der Methode StringReplace musst du aber Strings geben, keine Zeichen. Einen String der nur dieses Zeichen enthält erstellst du entweder indem du eine lokale Variable (String) deklarierst und dort in jedem Durchlauf das Zeichen (Char) zuweist oder mit String.Create(..):
Delphi-Quellcode:
const
forbiddenCharacter = #128064; var stringOfForbiddenCharacter: String; begin stringOfForbiddenCharacter := forbiddenCharacter; stringOfForbiddenCharacter := String.Create([forbiddenCharacter]); stringOfForbiddenCharacter := String.Create(forbiddenCharacter, 1); end. |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Hallo Günther,
vielen Dank für deine Antwort. Das Steuerzeichen-String soll als Quelle dienen. Da sporadisch weitere Steuerzeichen hinzukommen, will ich nicht jedesmal im Quellcode ein Steuerzeichen einfügen, sondern möchte diesen aus einer zb. Datei oder Datenbank entnehmen, welche ich ohne weiteres immer wieder erweitern kann. Deshalb ist es wichtig, dass ich das Steuerzeichen-String in ein "echtes" Steuerzeichen umwandeln kann. Gibt es keine Funktion wie zb. "StringToSteuerZeichen"? :gruebel: |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Vielleicht so?
Delphi-Quellcode:
function StringToSteuerZeichen(const s: String): Char;
begin Result := Char(StrToInt(copy(s, 2, MaxInt))); end; |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Du möchtest das machen:
Delphi-Quellcode:
sText := StringReplace(sText, #128064, '', [rfReplaceAll, rfIgnoreCase]); // funktioniert Wenn Du aber mit Deinem Stringarray arbeitest, machst Du (soweit ich das verstehe) aber jenes:
Delphi-Quellcode:
sText := StringReplace(sText, '#128064', '', [rfReplaceAll, rfIgnoreCase]); // funktioniert Müsste Dein Array nicht eher so aussehen?
Delphi-Quellcode:
const
sZeichen : Array [1..3] of Char = (#128064, #128125, #128148); |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Zitat:
Oder meinst du dass du, aus welchen Gründen auch immer, Strings (z.B. '#1234') schon vorliegen hast und diese nun zu Chars (z.B. #1234) machen möchtest? //// Edit Bist du sehr sicher mit diesen "großen" Zahlen? Der Delphi-Typ "Char" ist anscheinend fest ein Word (also von 0-65535). Die Länge von
Delphi-Quellcode:
gibt Delphi lustigerweise auch mit 2 an, denn es sind zwei Character, vier Byte.
alien: String = '��';
( ![]() // Edit2 Die Delphi-Praxis macht auch aus dem Alien-Emoji zwei Fragezeichen (der Browser konnte es). Delphi ist also nicht die einzige Software auf dem Planeten für die das zu spacig ist. |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
nahpets:
Diese Variante habe ich aktuell im Code: Zitat:
Günther: Zitat:
samso: Zitat:
|
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Gut, dann habe ich es jetzt erst richtig verstanden, sorry :oops:
Aber wie gesagt: Ein Char nimmt eh maximal 65535 auf. Um deinen Wert abzuspeichern bräuchtest du zwei Character. |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Zwei Character?
Wie soll das funktionieren? Result := Char() + Char() |
AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Zitat:
Im Array steht '#1234', ersetzt werden soll aber #1234. Gesucht wird eine Methode, um aus '#1234' #1234 zu machen. Einfacher wäre es, direkt ein Array mit Steuerzeichen zu machen, statt eine Array mit Zeichenfolgen, die so aussehen, wie Steuerzeichen im Delphiquelltext, wenn man deren mit # beginnenden Pedant nutzt. Statt #1234 müsste doch auch Chr(1234) gehen, oder irre ich mich da? In dem Fall könnte auch ein Array of Word (oder sowas) gehen und in der Ersätzroutine könnte es dann so aussehen:
Delphi-Quellcode:
(Bitte nicht hauen, wenn ich mich da jetzt irre ;-))
const
sZeichen : Array [1..3] of Word = (128064, 128125, 128148); sText := StringReplace(sText, Chr(128064), '', [rfReplaceAll, rfIgnoreCase]); Ok, wenn das Ganze nun nicht im Quelltext sein soll, dann hilft das Array so ja auch nicht. Also z. B. eine Datei, die in jeder Zeile eine "Zahl" enthält, also
Code:
Die Datei einlesen und dann zeilenweise abarbeiten.
128064
128125 128148 Sinngemäß ungefähr sowas?
Delphi-Quellcode:
Edit: Geht das bei aktuellen Delphis mit WideChar?
var
sl : TStringList; i : Integer; ch : WideChar; begin sl := TStringList.Create; sl.LoadFromFile('Steuerzeichen.cfg'); for i := 0 to sl.Count - 1 do begin ch := WideChar(StrToInt(sl[i])); sText := StringReplace(sText, ch, '', [rfReplaceAll, rfIgnoreCase]); end; sl.Free; end; Laut Delphi-7-Hilfe handelt es sich um: "WideChar-Werte stellen Zeichen mit einer Länge von mehr als einem Byte dar." |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 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