使用 StringList 解析文本:\n vs #13#10 vs sLineBreak
Parsing Text with StringList: \n vs #13#10 vs sLineBreak
我正在尝试用 TStringList
:
解析字符串
sl:=TStringList.Create;
try
sl.Text:=aString;
FFirstRow:=sl[0];
FSecondRow:=sl[1];
finally
sl.Free;
end;
如果 aString:='aa'+#13#10+'bb'
或 aString:='aa'+sLineBreak+'bb'
则 FFirstRow
是 aa
而 FSecondRow
是 bb
。但是如果 aString:='aa\nbb'
则 FFirstRow
得到整个字符串(并且没有第二行)。如何解析以 \n
作为分隔符的字符串?
我尝试了 sl.Delimiter:=Char(13)
(和 sl.DelimitedText:=aString
)。
2 字符序列 '\'
+'n'
在 Delphi 中不被视为转义序列(仅在 C/C++ 中,并且仅在编译-时间文字,不在运行时数据中)。您将不得不手动替换序列,例如 StringReplace()
,例如:
aString := 'aa\nbb';
sl := TStringList.Create;
try
sl.Text := StringReplace(aString, '\n', #10, [rfReplaceAll]);
FFirstRow := sl[0];
FSecondRow := sl[1];
finally
sl.Free;
end;
您可以只更改 TStringList
:
中被视为换行符的字符串
sl := TStringList.Create;
try
sl.LineBreak := '\n';
sl.Text := aString;
FFirstRow := sl[0];
FSecondRow := sl[1];
finally
sl.Free;
end;
我正在尝试用 TStringList
:
sl:=TStringList.Create;
try
sl.Text:=aString;
FFirstRow:=sl[0];
FSecondRow:=sl[1];
finally
sl.Free;
end;
如果 aString:='aa'+#13#10+'bb'
或 aString:='aa'+sLineBreak+'bb'
则 FFirstRow
是 aa
而 FSecondRow
是 bb
。但是如果 aString:='aa\nbb'
则 FFirstRow
得到整个字符串(并且没有第二行)。如何解析以 \n
作为分隔符的字符串?
我尝试了 sl.Delimiter:=Char(13)
(和 sl.DelimitedText:=aString
)。
2 字符序列 '\'
+'n'
在 Delphi 中不被视为转义序列(仅在 C/C++ 中,并且仅在编译-时间文字,不在运行时数据中)。您将不得不手动替换序列,例如 StringReplace()
,例如:
aString := 'aa\nbb';
sl := TStringList.Create;
try
sl.Text := StringReplace(aString, '\n', #10, [rfReplaceAll]);
FFirstRow := sl[0];
FSecondRow := sl[1];
finally
sl.Free;
end;
您可以只更改 TStringList
:
sl := TStringList.Create;
try
sl.LineBreak := '\n';
sl.Text := aString;
FFirstRow := sl[0];
FSecondRow := sl[1];
finally
sl.Free;
end;