c# - 使用 ShouldSkipRecord 过滤 CSVHelper 中的日期范围
问题描述
在 csvhelper 中使用 ShouldSkipRecord 过滤日期范围会是什么样子?
谷歌搜索了一堆,但只有一个对其回调的引用,这不足以让我了解 ShouldSkipRecord 调用的语法应该是什么样子。您是否按列和行来选择它。API 中有一条短线,仅此而已。
if (File.Exists(lastPathName))
{
using (var reader = new StreamReader(lastPathName))
using (var csv = new CsvReader(reader))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<QuotedataMap>();
csv.Configuration.ShouldSkipRecord = row => row[0] >= DateTime.Parse("12/12/2019");
var records = csv.GetRecords<Quotedata>();
return records;
}
}
public sealed class QuotedataMap : ClassMap<Quotedata>
{
public QuotedataMap()
{
Map(m => m.QuoteDate).Index(0);
Map(m => m.OpenPrice).Index(1);
Map(m => m.HighPrice).Index(2);
Map(m => m.LowPrice).Index(3);
Map(m => m.ClosePrice).Index(4);
Map(m => m.DateVolume).Index(5);
}
}
那么如何过滤日期范围呢?>= <= == ?
解决方案
row 变量是一个字符串数组。因此,您必须在比较之前将 String 转换为 DateTime。
csv.Configuration.ShouldSkipRecord = row => DateTime.Parse(row[0]) >= DateTime.Parse("12/12/2019");
如果您的表达式将变得更复杂,您可以将其移至单独的方法。
csv.Configuration.ShouldSkipRecord = row => FilterDataRange(row[0]);
该方法看起来像这样
private bool FilterDataRange(string quoteDateAsString)
{
var date = DateTime.Parse(quoteDateAsString);
return date >= new DateTime(2019, 12, 1) && date <= new DateTime(2019, 12, 31);
}
推荐阅读
- azure - 使用 Azure 媒体服务通过 shaka 打包程序交付 DRM 许可证?
- java - 我的 java 代码中带有 httpconnection 的奇怪错误
- javascript - 从 GET 的下拉菜单中加载值
- r - 安装 R 包时获取依赖项不可用
- cakephp - allowEmptyString() - 表示只允许空字符串或填充字符串和空字符串
- javascript - 如何在猫鼬中为内部填充字段分组
- linux - 失败:dbName.collectionName:从 collectionName.bson 恢复时出错:读取 bson 输入:意外 EOF
- swift - 切换绑定
使用 SwiftUI 按钮操作 - java - 无法获取每个 facebook 的日期,例如使用 facebook4j
- python - 在背景图像上透明地堆叠图像