AW: Variablen in Stringliteral inlinen
Zitat:
Wobei das eigentlich auch für die Platzhalter in Format-Strings gilt. Wenn der Übersetzer dabei einen Fehler macht, stürzt das Programm ab:
Delphi-Quellcode:
s := Format(_('Result is %d'), [Res]);
Und der Übersetzer vertippt sich: 'Ergebnis ist %f' Bumm! |
AW: Variablen in Stringliteral inlinen
Zitat:
(Übersetzung/Datenbank wo Texte durch user bearbeitet oder über eine Synchronisierung/Update nachgeladen werden) Drum hab ich bei uns das Format überschrieben/überdeckt. Der Code muß nur in eine Unit die immer nach den SysUtils eingebunden wird. Wenigstens "etwas" anzeigen und das Programm nicht abkratzen lassen.
Delphi-Quellcode:
Oder zumindestens dem Entwickler etwas helfen, damit man gleich sieht bei welchem "kompletten" String es knallt.
function Format(const FormatStr: string; const Args: array of const): string;
begin try Result := SysUtils.Format(FormatStr, Args); except {Meldung ins Log, wenn sowas vorhanden} Result := FormatStr; // oder Result := '[ERR] ' + FormatStr; end; end;
Delphi-Quellcode:
Und das Gleiche für die Variante mit den FormatSettings.
function Format(const FormatStr: string; const Args: array of const): string;
begin try Result := SysUtils.Format(FormatStr, Args); except on E: Exception do begin E.Message := 'Fehler in Format-String >>' + FormatStr + '<<' + sLineBreak + sLineBreak + E.Message; raise; end; end; end; Alternativ verwendet man niemals Format, sondern ruft eine eigene MyFormat auf. |
AW: Variablen in Stringliteral inlinen
Zitat:
|
AW: Variablen in Stringliteral inlinen
Joar, oder automatische Übersetzer, die z.B. ein "%s" trennen.
In "% s" oder die beiden wild verteilen, bzw. Teile weglassen. Hatte mal mit Poedit gespielt und dort eine automatische Google-Translate-Übersetzung reingeladen. Da kamen die wildesten Ergebnisse bei raus. Oder bei einigen Online-Spielen gibt es z.B. im Chat/Mails eine automatische Üersetzung, wo bei Systemnachrichten die Platzhalter gern mal zerstört werden. |
AW: Variablen in Stringliteral inlinen
Zitat:
Am meisten nervt mich aber, dass man den Datentyp überhaupt angeben muss. Write kann den ja auch automatisch erkennen, warum gibt es bei Format nicht sowas wie einen generischen Platzhalter:
Delphi-Quellcode:
Format('Der Wert ist %g', [IrgendeineVariable]);
Die Format-Funktion weiss ja, welcher Datentyp übergeben wurde, denn eigentlich ist das ja ein Variant mit entsprechenden Informationen. Den kann man dann halt nach String konvertieren. Für viele Anwendungen würde das ausreichen. Aber das Thema war ja ein anderes ... |
AW: Variablen in Stringliteral inlinen
Und woher soll write wissen, wie viele Nachkommastellen du willst? Wie viele führende Nullen?
|
AbarW: Variablen in Stringliteral inlinen
Moin,
da wäre so etwas wie die Systemeinstellungen für das Datumsformat denkbar. Wenn der Entwickler das anders haben will, dann könnte er die Formatanweisungen wie bisher benutzen. Bis denne, Edmund |
AW: Variablen in Stringliteral inlinen
Zitat:
Hab erst gestern geschaut, ob man Format so umbauen könnte wie string.Format in .NET, die dort übergebenen Parameter sind alle object und haben somit die exakten Typeninformationen dabei. Mit SysUtils.Format kann ich nichtmal Datum oder Zeit allein über den Formatstring ausgeben :kotz: Zitat:
Übrigens solltet ihr nicht Write und Format verwechseln, die funktionieren unterschiedlich. |
AW: Variablen in Stringliteral inlinen
Ich meine natürlich Format. Sorry.
|
AW: Variablen in Stringliteral inlinen
Zitat:
Eine große Hook-Engine wollte/konnte ich für die paar Kleinigkeiten nicht so einfach integrieren. (die das dann je nach Ziel richtig erledigt) Und beim selbst hooken (JMP+Adresse in Prozeduranfang schreiben oder bei Packages/DLL in "allen" Libraries die Referenz überschreiben) muß man da bissl aufpassen, dass man den hook nicht nur im aktuellen Package/DLL macht (war mir einmal passiert (vorsicht vor Copy&Paste aus Hook-Tutorials, denn die sind fast immer nur für Ein-EXE-Anwendungen) und ob man dann die originale Funktion auch noch verwenden möchte und demnach eben nicht den Prozeduranfang überschreiben kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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