【发布时间】:2009-02-04 23:23:44
【问题描述】:
我有一个超过一百万行的文件。
{<uri::rdfserver#null> <uri::d41d8cd98f00b204e9800998ecf8427e> <uri::TickerDailyPriceVolume> "693702"^^<xsd:long>}
{<uri::rdfserver#null> <uri::d41d8cd98f00b204e9800998ecf8427e> <uri::TickerDailyPriceId> <uri::20fb8f7d-30ef-dd11-a78d-001f29e570a8>}
每一行都是一个语句。
struct Statement
string C;
string S;
string P;
string O;
string T;
目前我在 while 循环中使用 TextReader 并使用正则表达式解析每一行:
Regex lineParse = new Regex(@"[^<|\""]*\w[^>\""]*", RegexOptions.Singleline | RegexOptions.Compiled);
执行此解析需要相当长的时间,我希望有人能指出更有效的解析策略。
有些行有 5 个匹配项,有些有 4 个。以下是每行的解析方式:
{<uri::rdfserver#null> <uri::d41d8cd98f00b204e9800998ecf8427e> <uri::TickerDailyPriceVolume> "693702"^^<xsd:long>}
Statement()
C = uri::rdfserver#null
S = uri::d41d8cd98f00b204e9800998ecf8427e
P = uri::TickerDailyPriceVolume
O = 693702
T = xsd:long
{<uri::rdfserver#null> <uri::d41d8cd98f00b204e9800998ecf8427e> <uri::TickerDailyPriceId> <uri::20fb8f7d-30ef-dd11-a78d-001f29e570a8>}
Statement()
C = uri::rdfserver#null
S = uri::d41d8cd98f00b204e9800998ecf8427e
P = uri::TickerDailyPriceId
O = uri::20fb8f7d-30ef-dd11-a78d-001f29e570a8
来自 cmets 的其他信息:“我看到的性能不佳实际上是由于我在代码中设置了一个条件断点。没有那个断点,一切都会很快。如果有人有任何改进的想法我会感兴趣”-Eric Schoonover
【问题讨论】:
-
我看到的性能不佳实际上是由于我在代码中设置了条件断点。没有那个断点,一切都很快。如果有人有任何改进的想法我会感兴趣:)
-
您可能会将该信息添加到您的帖子中,这样人们就知道您不再追求速度了。
-
我仍在寻找速度,只是我发布的正则表达式并不一定像我想象的那么慢。
-
我很想知道您的方法与@sixlettervariables 提供的方法相比如何。我希望拆分方法明显更快。
-
顺便说一下,在这个字符类 - [^