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
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 16:38
Heißt das, dass dashier funktioniert
Delphi-Quellcode:
var
  sl : TStringList;
  i : Integer;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('Steuerzeichen.cfg');
  for i := 0 to sl.Count - 1 do begin
    sText := StringReplace(sText, StringToSteuerZeichen(sl[i]), '', [rfReplaceAll, rfIgnoreCase]);
  end;
  sl.Free;
end;
wenn der Inhalt der Datei so
Code:
#128064
#128125
#128148
aussieht?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.513 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 16:45
Nein.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#3

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 16:57
Warum nicht? Genau so wie nahpets es schreibt, hätte ich gedacht funktioniert es.
  Mit Zitat antworten Zitat
samso

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

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:08
Wenn man lieber UCS4StringToUnicodeString benutzen möchte, dann geht das so:

Delphi-Quellcode:
function StringToSteuerZeichen(const s: String): String;
var
  c: Cardinal;
  t: UCS4String;
begin
  c := StrToInt(copy(s, 2, MaxInt));
  SetLength(t, 2);
  t[0] := UCS4Char(c);
  t[1] := UCS4Char(0);
  Result := UCS4StringToUnicodeString(t);
end;
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.513 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:13
Ah Sorry, dachte es ginge immer um "in ein echtes Steuerzeichen umwandeln".
Das "StringReplace(sText, ..., '', [rfReplaceAll, rfIgnoreCase]);" löscht aber
Also so könnte es funktionieren. Vermutlich ist es aber umständlich und langsam.

Ggf, macht es Sinn die Liste im Speicher zu halten.
Ggf, macht es auch Sinn auf die Liste zu verzichten und gleich ganze Unicode-Blöcke zu löschen. Oder alle Surrogaten, oder alle combined Chars ...
  Mit Zitat antworten Zitat
bogdan

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

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 18:31
Zitat:
Ggf, macht es Sinn die Liste im Speicher zu halten.
Ja, die Liste wird in ein globales Array gepackt und bei Bedarf verarbeitet.

Zitat:
Ggf, macht es auch Sinn auf die Liste zu verzichten und gleich ganze Unicode-Blöcke zu löschen. Oder alle Surrogaten, oder alle combined Chars ...
Daran hatte ich auch schon gedacht. Will aber zur Zeit den Prozess nicht unnötig aufblähen, deshalb ist eine kleine Liste mit Erweiterungspotenziall im Moment noch OK und mit Samson's Funktion tut es einwandfrei.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#7

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 30. Jun 2017, 07:19
Leider habe ich erst jetzt die ultimative Funktion gefunden mit der man das realisieren kann...

Delphi-Quellcode:
function StringToSteuerZeichen(const s: String): String;
begin
  Result := Char.ConvertFromUtf32(StrToInt(copy(s, 2, MaxInt)));
end;
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:11
In Delphi ist der UCS4 Deklariert als Cardinal

UCS4Char = type Cardinal;
und
UCS4String = array of UCS4Char;

Leider ist in der Function UCS4StringToUnicodeString ein Fehler.....
es wird immer ein UCS4 char zu wenig ausgewertet........
Also selber machen.

Delphi-Quellcode:
function myUCS4StringToUnicodeString(const S: UCS4String): UnicodeString;
var
  I: Integer;
  CharCount: Integer;
  Tmp: array of Char;
begin
  SetLength(Tmp, Length(S) * 2); //Maximum possible number of characters
  CharCount := -1;

  I := 0;
  while I < Length(S) do // Removed -1
  begin
    if S[I] >= $10000 then
    begin
      Inc(CharCount);
      Tmp[CharCount] := WideChar((((S[I] - $00010000) shr 10) and $000003FF) or $D800);
      Inc(CharCount);
      Tmp[CharCount] := WideChar(((S[I] - $00010000) and $000003FF)or $DC00);
    end
    else
    begin
      Inc(CharCount);
      Tmp[CharCount] := WideChar(S[I]);
    end;

    Inc(I);
  end;

  SetString(Result, PChar(Tmp), CharCount + 1);
end;


procedure TForm32.Button1Click(Sender: TObject);
const
  u41: UCS4Char = 128064;
  u42: UCS4Char = 128125;
  u43: UCS4Char = 128148;

Var
  test: Ucs4String;
  temp: String;
begin

  test := [u41, u42, u43];

  temp := myUCS4StringToUnicodeString(test);
  ShowMessage(temp);
end;
Fritz Westermann

Geändert von Fritzew (29. Jun 2017 um 17:27 Uhr) Grund: Länge für Tmp korrigiert
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#9

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:22
@Fritzew: Zu UCS4StringToUnicodeString:
Ja, so wie Du es schreibst würde ich das auch logischer finden. Du musst bei Dir noch die maximal Anzahl der Character vergößern.

  SetLength(Tmp, Length(S) * 2); //Maximum possible number of characters
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:27
stimmt danke
Fritz Westermann
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:14 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