CDATA 要素にリストがあります。CDATA から要素を取得し、これを TStringList に追加するにはどうすればよいですか?
CDATA 文字列を取得すると、次のように返されます。
'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string'...
ただし、文字 #10#9#9#9 は文字列ではありません。StringChangeEx メソッドを使用してこれらの文字を置き換えることはできません。
ありがとう
CDATA 要素にリストがあります。CDATA から要素を取得し、これを TStringList に追加するにはどうすればよいですか?
CDATA 文字列を取得すると、次のように返されます。
'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string'...
ただし、文字 #10#9#9#9 は文字列ではありません。StringChangeEx メソッドを使用してこれらの文字を置き換えることはできません。
ありがとう
取得した文字列は、印刷できない文字を含む文字列の有効な表記です。StringChangeEx
ただし、文字列リストまたは関数を操作するときに char が失われることを心配する必要はありません。この短いスクリプトであなたを納得させましょう:
[Code]
const
PrintableString = 'string-string-string-string';
NonPrintableString = 'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string';
procedure InitializeWizard;
var
S: string;
StringList: TstringList;
begin
StringList := TstringList.Create;
try
StringList.Add(NonPrintableString);
S := StringList[0];
if S = NonPrintableString then
MsgBox('String list didn''t lose non printable chars!', mbInformation, MB_OK);
StringChangeEx(S, #10#9#9#9, '-', True);
if S = PrintableString then
MsgBox('String has been modified as expected!', mbInformation, MB_OK);
finally
StringList.Free;
end;
end;
ただし、これらのデータをユーザーに提示したいという理由だけで質問が提起されたと思います。印刷できない文字では難しい場合があります。すべての一例です。途中に null ターミネータを含む文字列があり、そのような文字列をメッセージ ボックスなどでユーザーに表示したい場合、ターミネータの前にある文字列の部分のみが表示されます。しかし、それはあなたが影響を与えることができるものではありません。これは、背後にある Windows API 関数呼び出しが文字列を処理する方法です。
[Code]
procedure InitializeWizard;
var
S: string;
begin
S := 'Hello'#0' world!';
MsgBox(S, mbInformation, MB_OK);
end;
ご覧のとおり、上記のケースでは、ヌル ターミネータ文字を印刷可能な文字 (スペースなど) に置き換える必要があります。