- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用德尔福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/
正如专家们的善意建议,TStringStream.DataString不能用于检索由TStringStream.LoadFromFile加载的非文本数据code>,因为TStringStream.Ge
Delphi 2009 及更高版本使用 unicode 字符串作为默认字符串类型。据我了解,unicode char 实际上是 16 位值或 2 个字节(注意:我知道可能有 3 或 4 字节字符,但让
我想要做什么:假设我有一个 TStringStream ,它只读取一个包含 100 个字符的字符串。如果我调用 .ReadString(50),我将获得该流的前 50 个字符,并且它的光标将被放置在位
使用德尔福XE,我需要将 TStringStream 解析为由字符串分隔的字符串。一种情况下的分隔符字符串是 [eol]。该流是使用 indy IdHttp 从网络服务器加载的。 然后我需要从流中解析
我正在使用Delphi XE2。我的代码从 SQL-Server 2008 R2 数据库中提取数据。返回的数据是一个包含 1,055,227 字节数据的 nvarchar(max) 字段。我使用以下代
我今天注意到,在 D2009(更新 1)中,TStringStream.ReadString 不再像 D2007 之前那样移动流中的位置。 因此,在 MyStringStream.ReadString
我正在使用 Embarcadero Delphi XE2 我正在创建一个快速报告(它并不那么重要)并将其保存到 TStringStream 接下来只是为了测试,我将 TStringStream 输出到
我尝试了以下方法: tstringstream s; s (message.c_str()); // `message` changed as above 如果您不能保证 Log 内部所做的事情,您
我正在开发一个相当简单的客户端/服务器应用程序,但在使用 Winsock API 提供的 recv 从客户端接收 TStringStream 时遇到一些问题。 我不断收到此错误:“0x00000000
对于 TStringStream,使用其 Bytes 属性的 bytes 与使用 TStream.Read 提取的 bytes 不同。如下图: 使用TStream.Read提取的字节代表正确的数据。
我是一名优秀的程序员,十分优秀!