Jac*_*hes 2 c# parsing sprache
我有一个报表服务器需要解析一个字符串,其中一些参数控制报表中的内容.
我正在使用解析器库sprache来帮助解决这个问题.一切都很好,除了我坚持的一件事.
我有一个时间过滤器,可以是以下值之一:今天,昨天,上周,上个月,无或自定义.
这是习惯,给我一些悲伤.所有其他只是简单的字符串.之后,Custom还有一个from和to属性.
private static readonly Parser<DataFilterEntity> TimeFilter =
from filter in Parse.String("today").Return(DataFilterEntity.Today)
.Or(Parse.String("yesterday").Return(DataFilterEntity.Yesterday)
.Or(Parse.String("last week").Return(DataFilterEntity.LastWeek)
.Or(Parse.String("last month").Return(DataFilterEntity.LastMonth)
.Or(Parse.String("none").Return(DataFilterEntity.None))
.Or(Parse.String("custom").Return(DataFilterEntity.Custom())))))
select filter;
Run Code Online (Sandbox Code Playgroud)
自定义行是问题所在.我需要解析"自定义"字符串,然后解析from和to DateTime字段,并将它们传递给DataFilterEntity.Custom(from,to)
任何想法都非常感激.
您需要首先为DateTime创建解析器,然后为自定义类型创建解析器.这是一个"可能有用的最简单的事情"的例子.您可能希望DateTimeParser在它接受的值中更具体一些.我不知道你的DataFilterEntity的构造函数是什么样的,所以我猜对了:)
public static readonly Parser<DateTime> DateTimeParser =
from day in Parse.Number
from s1 in Parse.Char('/')
from month in Parse.Number
from s2 in Parse.Char('/')
from year in Parse.Number
select new DateTime(int.Parse(year), int.Parse(month), int.Parse(day));
public static readonly Parser<DataFilterEntity> CustomParser =
from a1 in Parse.String("custom").Token()
from fromDateTime in DateTimeParser.Token()
from toDateTime in DateTimeParser.Token()
select new DataFilterEntity(fromDateTime.ToShortDateString() + " -> " + toDateTime.ToShortDateString());
public static readonly Parser<DataFilterEntity> TimeFilter =
Parse.String("today").Return(DataFilterEntity.Today)
.Or(Parse.String("yesterday").Return(DataFilterEntity.Yesterday)
.Or(Parse.String("last week").Return(DataFilterEntity.LastWeek)
.Or(Parse.String("last month").Return(DataFilterEntity.LastMonth)
.Or(Parse.String("none").Return(DataFilterEntity.None))
.Or(CustomParser))));
public void TestIt()
{
var result = TimeFilter.Parse("custom 21/3/2013 10/4/2013");
Console.Out.WriteLine("result.Value = {0}", result.Value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |