Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text aus Datei laden, Single Quote Problem (https://www.delphipraxis.net/201035-text-aus-datei-laden-single-quote-problem.html)

DieDolly 18. Jun 2019 10:43

AW: Text aus Datei laden, Single Quote Problem
 
Es sei n och erwähnt, dass ich CreateMessageDialog verwende.

Delphi-Quellcode:
MsgStr := WrapText(AText, sLineBreak, ['.', ' ', #9, '-'], 75);
 MsgDlg := CreateMessageDialog(MsgStr, MsgDlgType, MsgDlgBtn, MsgDlgBtnDef);
Nach 75 Zeichen sollte eigentlich umgebrochen werden. Es wird aber eine ungefähr 135 Zeichen lange Zeile angezeigt.
Ohne irgendein ' im String wird auch richtig umgebrochen.

Wenn ich ein '' in die Datei schreibe wird korrekt umgebrochen. Aber dann wird auch ein '' angezeigt. Mit StringReplace das '' durch ' austauschen führt zum ursprünglichen Problem.

Moombas 18. Jun 2019 11:05

AW: Text aus Datei laden, Single Quote Problem
 
Könnte es mit deiner Umwandlung (UTF8ToWideString) zu tun haben?

Uwe Raabe 18. Jun 2019 11:09

AW: Text aus Datei laden, Single Quote Problem
 
Der Kommentar zu WrapText in System.SysUtils sagt aber auch:
Zitat:

{ WrapText will scan a string for BreakChars and insert the BreakStr at the
last BreakChar position before MaxCol. Will not insert a break into an
embedded quoted string (both ''' and '"' supported) }
Es sollte also funktionieren, wenn du jeden der Single-Quotes verdoppelst.

DieDolly 18. Jun 2019 11:09

AW: Text aus Datei laden, Single Quote Problem
 
Ich habe gehofft es liegt daran. Aber daran liegt es leider nicht.
Das scheint irgendein tiefliegenderes Problem mit dem CreateMessageDialog zu sein. Von CreateMessageDialog kann ich leider nicht weg.

Wenn ich die Single Quotes verdopplte, dann wird korrekt umgebrochen. Aber dann sehe ich im Resultat auch doppelte Quotes.

Schokohase 18. Jun 2019 11:12

AW: Text aus Datei laden, Single Quote Problem
 
Zitat:

Zitat von DieDolly (Beitrag 1434927)
Ich habe gehofft es liegt daran. Aber daran liegt es leider nicht.
Das scheint irgendein tiefliegenderes Problem mit dem CreateMessageDialog zu sein. Von CreateMessageDialog kann ich leider nicht weg.

Wenn ich die Single Quotes verdopplte, dann wird korrekt umgebrochen. Aber dann sehe ich im Resultat auch doppelte Quotes.

Dein Problem liegt in der Funktion
Delphi-Quellcode:
WrapText
und nirgendwo anders.

Also, entweder vor dem WrapText die Quotes verdoppeln und danach wieder das Verdoppeln rückgängig machen oder eine andere WrapText verwenden/schreiben.

Schaust du dir eigentlich niemals an, was du in die Funktionsaufrufe übergibst? Dann wäre dir sofort aufgefallen, dass die Umbrüche beim Aufruf von CreateMessageDialog fehlen und es also daran nicht liegen kann.

DieDolly 18. Jun 2019 11:17

AW: Text aus Datei laden, Single Quote Problem
 
Zitat:

Also, entweder vor dem WrapText die Quotes verdoppeln und danach wieder das Verdoppeln rückgängig machen oder eine andere WrapText verwenden/schreiben.

Schaust du dir eigentlich niemals an, was du in die Funktionsaufrufe übergibst? Dann wäre dir sofort aufgefallen, dass die Umbrüche beim Aufruf von CreateMessageDialog fehlen und es also daran nicht liegen kann.
Wieso fährst du mich denn jetzt so an?

Zitat:

dass die Umbrüche beim Aufruf von CreateMessageDialog fehlen und es also daran nicht liegen kann.
Die Umbrüche existieren absichtlich nicht. Was denkst du, warum ich WrapText verwende.

Delphi-Quellcode:
 MsgStr := StringReplace(MsgStr, #39, #39#39, [rfReplaceAll]);
 MsgStr := WrapText(MsgStr, sLineBreak, ['.', ' ', #9, '-'], 75);
 MsgStr := StringReplace(MsgStr, #39#39, #39, [rfReplaceAll]);
Das dauert zum Glück nicht einmal 1 Millisekunde bei mir. Ich hatte mit dem Schlimmsten gerechnet. Ist zwar umständlich aber funktioniert.

Schokohase 18. Jun 2019 11:25

AW: Text aus Datei laden, Single Quote Problem
 
Zitat:

Zitat von DieDolly (Beitrag 1434930)
Zitat:

dass die Umbrüche beim Aufruf von CreateMessageDialog fehlen und es also daran nicht liegen kann.
Die Umbrüche existieren absichtlich nicht. Was denkst du, warum ich WrapText verwende.

Aber genau das ist doch das Problem.

Du willst vor dem Aufruf von
Delphi-Quellcode:
CreateMessageDialog
aktiv Zeilenumbrüche mit
Delphi-Quellcode:
WrapText
in den Text hineinbringen.
Du vermisst Zeilenumbrüche im MessageDialog.

Und da kommst du nicht auf die Idee, zu schauen, was bei
Delphi-Quellcode:
WrapText
denn so herauskommt, also dem Dingen, was da Zeilenumbrüche reinbringen soll?

Das lässt mich nur etwas den Kopf schütteln.

DieDolly 18. Jun 2019 11:49

AW: Text aus Datei laden, Single Quote Problem
 
Es können nun einmal nicht alle so perfekt sein wie du. Nun aber Ende im Gelände.

p80286 18. Jun 2019 21:27

AW: Text aus Datei laden, Single Quote Problem
 
Zitat:

Zitat von Schokohase (Beitrag 1434932)
Und da kommst du nicht auf die Idee, zu schauen, was bei
Delphi-Quellcode:
WrapText
denn so herauskommt, also dem Dingen, was da Zeilenumbrüche reinbringen soll?

Ich würde das über das fragliche Zeichen angehen.
1) Was ist denn der Hex-Wert des Zeichens? im verwendeten Zeichensatz!
2) Welche(s) Zeichen (Hex-Wert)/Zeichensatz verhindert den angestrebten Umbruch?
3) Gibt es ein Escape-Zeichen?

Ok ist ganz schön korinthenkackerisch, aber exakt! Und bei der teilweise kreativen Darstellung von Zeichen durch verschiedene Fonts absolut notwendig.

Gruß
K-H

DieDolly 18. Jun 2019 21:48

AW: Text aus Datei laden, Single Quote Problem
 
Zitat:

Ich würde das über das fragliche Zeichen angehen.
1) Was ist denn der Hex-Wert des Zeichens? im verwendeten Zeichensatz!
2) Welche(s) Zeichen (Hex-Wert)/Zeichensatz verhindert den angestrebten Umbruch?
3) Gibt es ein Escape-Zeichen?
Verstehe ich nicht. Ein Escapezeichen gibt es nicht.
In welchem Zeichensatz das ' ist weiß ich nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr.
Seite 2 von 3     12 3      

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