gpt4 book ai didi

c# - 从 CSV 文件中读取最新行

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:34 26 4
gpt4 key购买 nike

我有一个 CSV 文件,我需要从中读取所有值。但仅从最新的最后一行开始。但我不知道该怎么做。

我现在使用的是 streamreader,但它循环遍历整个 CSV 文件,该文件可能非常大。

我需要读取两个不同的 csv 文件(标题相同但位置不同)。

但是我怎样才能将这段代码编辑为只从最后一行读取呢?我四处寻找,但找不到任何与我相同的东西。

这就是我现在的做法:

using (var reader = new StreamReader(path))
{
var headerLine = reader.ReadLine();
var headerValues = headerLine.Split(',');
var serialNumber = headerValues[66];

while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');

if (values[0] != "Index")
{
var analyseReport = new AnalyseReport();
analyseReport.SerialNumber = serialNumber;

foreach (var item in headerValues)
{
var headerName = item.Trim();
var index = Array.IndexOf(headerValues, item);

switch (headerName)
{
case "Index":
analyseReport.Index = Convert.ToInt32(values[index].Trim());
break;

case "Time":
analyseReport.TimeStamp = Convert.ToDateTime(values[index].Trim());
break;

case "Reading No":
analyseReport.ReadingNo = Convert.ToInt32(values[index].Trim());
break;
case "Duration":
analyseReport.Duration = values[index].Trim();
break;

case "Type":
analyseReport.Type = values[index].Trim();
break;

case "Units":
analyseReport.Units = values[index].Trim();
break;

default:
break;
}
}

analyseReportList.Add(analyseReport);

}
}
return analyseReportList;
}

最佳答案

如果您没有固定长度的行,但可以确定行的长度上限,则可以使用启发式方法更有效地阅读最后一行。

基本上要做的是将文件流的当前位置从末尾移动到 n 字节,然后读取直到到达最后一行。

private string ReadLastLine(string fileName, int maximumLineLength)
{
string lastLine = string.Empty;

using(Stream s = File.OpenRead(path))
{
s.Seek(-maximumLineLength, SeekOrigin.End);

using(StreamReader sr = new StreamReader(s))
{
string line;

while((line = sr.ReadLine()) != null)
{
lastLine = line;
}
}
}

return lastLine;
}

对于 1.8 MB 的 CSV,它比 File.ReadLines 方法快大约 100-200 倍。无论如何,以一种更复杂的代码为代价。

备注:虽然您可以使用此方法来优化读取最后一行,如果这确实是瓶颈,请使用方法Tim Schmelter 的更清晰和更清晰的版本,如果可能的话。请记住第二条优化规则:“暂时不要这样做。”

此外,要确定行的最大长度,您必须小心并考虑字符编码。与其高估线长,不如低估线长。

关于c# - 从 CSV 文件中读取最新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com