如何解决在列数未知时对 CSV 数据进行排序?
考虑一个 CSV 文件,我知道前两列的样子,但不知道其余的样子:
Id | DateWithTime | column 3 | ... | column n
我想读取这样的文件,按 DateWithTime
列对其进行排序并保存。我不知道该文件有多少列,因此无法为其构建模型。我只知道它至少有前两列 Id
和 DateWithTime
。那么,我将如何使用 CSVHelper 访问此文件并对其进行排序?
注意:假设 DateWithTime
可以按字母顺序排序,这里没什么特别的。问题是如何访问它,因为列数未知,我无法构建模型。
注 2:标题可能不完整,例如标题可能有 5 列,但数据有时可能有 6 列或更多。
解决方法
也许读为 dynamic
对象可行? https://joshclose.github.io/CsvHelper/examples/reading/get-dynamic-records/
void Main()
{
using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<dynamic>();
var sorted = records.OrderBy(i => DateTime.Parse(i.DateWithTime)).ToList();
using (var writer = new StreamWriter("output.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
}
尽管“可能比标题多行”问题可能不适用于此。
另一种选择可能是在不解析数据的情况下将数据作为行读取和排序(尽管如果某些数据是多行,这将是有问题的)。
,也许 DataTable 将是解决方案? 您可以根据需要添加任意数量的列,插入行,保留日期时间数据类型,其余列是纯文本,这不是问题。 DataTable 可以对行进行排序。 如果标题不完整,可以在读取文件时添加一列。 或者添加比您预期更多的列开始。列名无关紧要。
编辑: 可以使用类读取更好的选项:
That was version related error.
**Now I understand the solution.**
**When you use: codeigniter V2:**
In CI v2.x finished with $this->_set_request($this->uri->segments);
**When you use: codeigniter V3:**
whereas CI v3.0-dev finishes with $this->_set_request(array_values($this->uri->segments));
你不在乎列的长度,用 Linq 排序很容易
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。