AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Steuerzeichen-String umwandeln in "echtes" Steuerzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

Ein Thema von bogdan · begonnen am 29. Jun 2017 · letzter Beitrag vom 30. Jun 2017
Antwort Antwort
Seite 1 von 3  1 23      
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#1

Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 13:04
Habe ein String Array mit Steuerzeichen-Strings:
Code:
const
  sZeichen : Array [1..3] of String = ('#128064', '#128125', '#128148');
Wie kann ich den String in ein echtes Steuerzeichen umwandeln um zb. folgendes machen zu können
Code:
sText := StringReplace(sText, #128064, '', [rfReplaceAll, rfIgnoreCase]); // funktioniert
Und sol wollte ich es anwenden, was aber nicht funktioniert:
Code:
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;
Was mache ich falsch?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 13:16
Die Drei Zeichen #128064, #128125 und #128148 stehen für "Eyes", "EXTRATERRESTRIAL ALIEN 👽 und "Broken heart". Was machst du für okkulte Sachen

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.
  Mit Zitat antworten Zitat
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#3

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 13:27
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"?
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#4

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 13:45
Vielleicht so?

Delphi-Quellcode:
function StringToSteuerZeichen(const s: String): Char;
begin
  Result := Char(StrToInt(copy(s, 2, MaxInt)));
end;

Geändert von samso (29. Jun 2017 um 13:46 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 13:57
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);
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 14:07
Deshalb ist es wichtig, dass ich das Steuerzeichen-String in ein "echtes" Steuerzeichen umwandeln kann.

Gibt es keine Funktion wie zb. "StringToSteuerZeichen"?
Ich habe dir drei Möglichkeiten gezeigt.


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 alien: String = '��'; gibt Delphi lustigerweise auch mit 2 an, denn es sind zwei Character, vier Byte.

(http://www.fileformat.info/info/unic...f47d/index.htm)


// 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.

Geändert von Der schöne Günther (29. Jun 2017 um 14:23 Uhr)
  Mit Zitat antworten Zitat
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#7

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 14:21
nahpets:

Diese Variante habe ich aktuell im Code:
Zitat:
const
sZeichen : Array [1..3] of Char = (#128064, #128125, #128148);
Das Problem ist nur, dass ich bei jedem neuen ungewollten Zeichen den Quellcode erweitern muss.

Günther:
Zitat:
Strings (z.B. '#1234') schon vorliegen hast und diese nun zu Chars (z.B. #1234) machen möchtest?
ja, genau!

samso:
Zitat:
Result := Char(StrToInt(copy(s, 2, MaxInt)));
Das sollte der richtige Ansatz sein. Funktioniert leider nur bis #255.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 14:24
Gut, dann habe ich es jetzt erst richtig verstanden, sorry

Aber wie gesagt: Ein Char nimmt eh maximal 65535 auf. Um deinen Wert abzuspeichern bräuchtest du zwei Character.
  Mit Zitat antworten Zitat
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#9

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 14:31
Zwei Character?
Wie soll das funktionieren?
Result := Char() + Char()
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 14:36
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?
Genau da dürfte das Problem liegen:

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:
const
  sZeichen : Array [1..3] of Word = (128064, 128125, 128148);

sText := StringReplace(sText, Chr(128064), '', [rfReplaceAll, rfIgnoreCase]);
(Bitte nicht hauen, wenn ich mich da jetzt irre )

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:
128064
128125
128148
Die Datei einlesen und dann zeilenweise abarbeiten.

Sinngemäß ungefähr sowas?
Delphi-Quellcode:
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;
Edit: Geht das bei aktuellen Delphis mit WideChar?
Laut Delphi-7-Hilfe handelt es sich um: "WideChar-Werte stellen Zeichen mit einer Länge von mehr als einem Byte dar."

Geändert von nahpets (29. Jun 2017 um 15:01 Uhr) Grund: Nach der 95. Änderung hoffentlich nicht mehr nur noch Müll, wie am Anfang. Sollte halt erst denken dann schreiben :-(
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
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