Как заставить Log.d игнорировать % в исходном HTML-коде? Или сказать Log.d не форматировать код?
HTML-код, который я отправляю своей программе:
<input type = "hidden" name = "Mode" value = "Search%20Statutes" />
Созданная мной процедура:
procedure ThtmlParser.DebugText(ExtraStr, Str: string);
var
CombineStrings: string;
begin
CombineStrings := ExtraStr + Str;
Log.d(CombineStrings);
if Assigned(FOnDebug) then
begin
FOnDebug(CombineStrings);
end;
end;
Как я его использую:
Target := '<input type = "hidden" name = "Mode" value = "Search%20Statutes" />'
DebugText('Target: ', Target);
Я получаю ошибку:
First chance exception at $756C1812. Exception class EConvertError with message 'No argument for format 'Target: <input type = "hidden" na''. Process htmlParserExample.exe (5168)
Я думаю, что происходит следующее: Log.d думает, что % в HTML-коде предназначен для форматирования, хотя это не так.
@MartynA Log.d находится в FMX.Types
@DaveNottage: Но как читатели могут догадаться, что это то, о чем говорит ОП? На q нет даже тега FireMonkey.
@MartynA log.d также доступен для проектов VCL, несмотря на то, что он находится в FMX.Types!
@PatHeuvel: Да, но читатели не должны догадываться, является ли это te log.d предполагаемым OP; информация должна быть в q.
@MartynA Достаточно честно!





Поскольку Delphi «ищет формат», я дал ему формат, которому нужно следовать.
Я не уверен, почему команда разработчиков Delphi создала class procedure d(const Msg: string); overload; inline; и не разрешила нам его использовать? Вот что меня смутило. Поэтому вместо этого я использовал это:
class procedure d(const Fmt: string; const Args: array of const); overload;
Вот моя новая процедура, которая решает мою проблему:
procedure ThtmlParser.DebugText(ExtraStr, Str: string);
var
CombineStrings: string;
begin
CombineStrings := ExtraStr + Str;
Log.d('%s',[CombineStrings]);
if Assigned(FOnDebug) then
begin
FOnDebug(CombineStrings);
end;
end;
Вместо этого я бы использовал Log.d('%s%s', [ExtraStr, Str]) и избавился от CombineStrings. Вы также должны отправить отчет об ошибке о некорректном поведении версии Log.d() с одним аргументом. Не должно ничего форматировать.
@Remy, ElDiablo: похоже, что Log.d(Msg) вызывает Log.d(Msg, []);. Это действительно ошибка. Должно быть наоборот. Или он мог вызвать Log.d('%s', [Msg]);. Это было бы хорошо.
Был только что уведомлен, что мой отчет является дубликатом quality.embarcadero.com/browse/RSP-20021 и что это решено в Delphi 10.3 Rio.
Где объявлен остальной ThtmlParser? Что такое декларация log.d?