gpt4 book ai didi

delphi - 我需要在 Delphi 中使用子字符串分隔符从 TStringStream 解析字符串?

转载 作者:行者123 更新时间:2023-12-03 15:52:49 29 4
gpt4 key购买 nike

使用德尔福XE,我需要将 TStringStream 解析为由字符串分隔的字符串。一种情况下的分隔符字符串是 [eol]。该流是使用 indy IdHttp 从网络服务器加载的。

然后我需要从流中解析字符串,它们由字符串“[eol]”分隔。例如,StringStream 可以包含:

“12345[eol]这是]某事[eol]并且[这没什么[eol]等[etcetc[[eol]””

应该解析为:

“12345”

“这是]某物”

“而且[这没什么”

“等等[等等等等[”

我所知道的大多数分隔符技术仅使用单个字符分隔符,然后我还需要迭代整个 Stream 直到其结束。我很茫然,

问候阿德里安

最佳答案

由于您已经在使用 Indy,因此可以使用其 SplitColumnsNoTrim() 函数,使用分隔符字符串将 String 拆分为 TStrings其中可以包含多个字符。顾名思义,SplitColumnsNoTrim() 不会在分隔的子字符串之间应用任何修剪。如果您想要修剪,请改用 SplitColumns()

var
Strm: TStringStream;
Strings: TStringList;
begin
Strings := TStringList.Create;
try
Strm := TStringStream.Create;
try
IdHTTP.Get('http://...', Strm);
SplitColumnsNoTrim(Strm.DataString, Strings, '[eol]');
finally
Strm.Free;
end;
// use Strings as needed ...
finally
Strings.Free;
end;
end;

不过,我不建议使用 TStringStream 进行这种解析。 D2009+ 中的 TStringStream 要求您在其构造函数中指定 TEncoding(或让它默认为操作系统默认 Ansi 编码),如果您有 TIdHTTP,则无法执行此操作直接下载到TStringStream中。您不会提前知道数据的字符集,除非数据始终是 ASCII。 TIdHTTP 具有使用数据的实际字符集将下载的数据解码为 String 的逻辑,因此您应该使用该功能,例如:

var
Strings: TStringList;
begin
Strings := TStringList.Create;
try
SplitColumnsNoTrim(IdHTTP.Get('http://...'), Strings, '[eol]');
// use Strings as needed ...
finally
Strings.Free;
end;
end;

关于delphi - 我需要在 Delphi 中使用子字符串分隔符从 TStringStream 解析字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626005/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com