Tag: csv

使用Filehelpers处理DelimitedRecord中的NEWLINE

我使用优秀的FileHelpers库来解析许多不同的文件。 其中一个文件有(某些)看起来像这样的行 id|name|comments|date 01|edov|bla bla bla bla|2012-01-01 02|john|bla bla bla bla|2012-01-02 03|Pete|bla bla bla bla|2012-03-01 04|Mary|bla bla bla bla|2012-01-01 请注意,ID为3的行在文本中有换行符。 另请注意,注释不包含引号,因此[FieldQuoted(‘”‘, MultilineMode.AllowForRead)]不会保存我。 Filehelpers在第4行抛出exception: 分隔符’|’ 字段“注释”后找不到(记录字段较少,分隔符错误或下一个字段必须标记为可选)。 无论如何我可以用FileHelpers解析这个文件吗?

读取文件的最后30,000行

如果有一个csv文件,其数据会不时增加。 现在我需要做的是阅读最后30,000行。 代码: string[] lines = File.ReadAllLines(Filename).Where(r => r.ToString() != “”).ToArray(); int count = lines.Count(); int loopCount = count > 30000 ? count – 30000 : 0; for (int i = loopCount; i < lines.Count(); i++) { string[] columns = lines[i].Split(','); orderList.Add(columns[2]); } 它工作正常,但问题是 File.ReadAllLines(Filename) 阅读导致性能不足的完整文件。 我想要它只读取最后30,000行迭代整个文件。 PS:我正在使用.Net 3.5。 Files.ReadLines()在.Net 3.5中不存在

使用没有类型的FileHelpers

我有一个从另一个系统导出的CSV文件,其中列顺序和定义可能会更改。 我发现FileHelpers非常适合读取csv文件,但是除非在编译应用程序之前知道列的顺序,否则它似乎无法使用它。 我想知道它是否可以以非类型的方式使用FileHelpers。 目前我正在使用它来阅读文件,但后来我正在手工做的其他事情,所以我有一个类: [DelimitedRecord(“,”)] public class CSVRow { public string Content { get; set; } } 这意味着每一行都在Content ,这很好,因为我已经分割了行等,但由于文件中固有的逗号,我现在遇到此方法的问题,因此一行可能是: “something”,,,,0,,1,,”something else”,””,””,,,”something, else” 我对这个字符串上的逗号的简单拆分不起作用,因为在“某些东西”中有一个逗号,它会被拆分。 显然,FileHelpers之类的东西非常方便,解析这些值并考虑引号。 那么有可能以这种方式使用FileHelpers,没有已知的列定义,或者至少能够传递一个csv字符串并获取值列表,或者是否有任何好的库来执行此操作?

拆分字符串并忽略引号内的分隔符

我使用.NET的String.Split方法使用逗号分解字符串,但我想忽略用双引号括起来的字符串。 我读过那个 例如,下面的字符串。 Fruit,10,”Bananas, Oranges, Grapes” 我想得到以下内容 Fruit 10 “Bananas, Oranges, Grapes” 目前我得到以下输出 Fruit 10 “Bananas Oranges Grapes” enter code here 在提出以下建议和答案之后,这里是我最终得到的样本。 (显然对我有用) Imports Microsoft.VisualBasic.FileIO Dim fileReader As New TextFieldParser(fileName) fileReader.TextFieldType = FieldType.Delimited fileReader.SetDelimiters(“,”) fileReader.HasFieldsEnclosedInQuotes = True While fileReader.EndOfData = False Dim columnData() As String = fileReader.ReadFields ‘ Processing of field data End While

如何在运行时检测Column数据类型,同时使用标头解析CSV文件

我正在使用FileHelpers加载CSV数据,(信用 – 搜索时找到了这个答案/搜索结果)。 用户浏览目录,选择带有标题的文件,然后上传进行解析。 我的问题是 – 它们是一次性文件,其cols / classes / types以前不知道 。 问题 :如何在解析时检测列的数据类型? 搜索后我发现了一个名为public Type RecordType的函数{ get; } 它提供了记录类型..我需要帮助来获取记录中的Col数据类型。 var fNengine = new FileHelperEngine(); var fNrecords = engine.ReadFile(“AttendeesByEvents.csv”); // How to get the Col types? // HeaderText = typeof(..*notKNown*).GetCsvHeader(); //..var headers = fNrecords.HeaderText(); //foreach (var header in headers) // Console.WriteLine(header.RecordType() + `\n`); 我也在SO上找到了这个答案,但@ shmap00提到的运行时助手或者他所指的帮助不再存在,我也查看了源代码树。 […]

用于馈线应用的multithreading架构

这是我在这里的第一篇文章,如果结构不合理,请道歉。 我们的任务是设计一个工具,它将: 读取(帐户ID)文件,CSV格式 从Web下载每个帐户的帐户数据文件(通过Id)(REST API) 将文件传递给将生成报告的转换器(财务预测等)[~20ms] 如果预测阈值在限制范围内,运行解析器来分析数据[400ms] 为上面的分析生成报告[80ms] 将生成的所有文件上传到Web(REST API) 现在所有这些个点都相对容易。 我很想知道如何最好地构建一些东西来处理这个并在我们的硬件上快速有效地完成它。 我们必须处理大约2百万个账户。 方括号可以了解每个流程平均需要多长时间。 我想使用机器上可用的最大资源–24核Xeon处理器。 这不是一个内存密集型过程。 使用TPL并将每个作为一项任务创建是一个好主意吗? 每个都必须按顺序发生,但许多可以一次完成。 不幸的是,解析器不是multithreading感知的,我们没有源(它本质上是我们的黑盒子)。 我的想法是这样的 – 假设我们正在使用TPL: 加载帐户数据(基本上是CSV导入或SQL SELECT) 对于每个帐户(Id): 下载每个帐户的数据文件 继续使用数据文件,发送到转换器 ContinueWith check threshold,发送给解析器 ContinueWith生成报告 ContinueWith上传输出 这听起来可行还是我没有正确理解? 以不同的方式分解步骤会更好吗? 我有点不确定如何处理解析器抛出exception的问题(它非常挑剔)或者当我们上传失败时。 所有这些都将在预定的作业中,作为控制台应用程序在下class后运行。

C#用分号导出CSV文件

我想将Excel文件转换为csv,我写了这个C#代码: Excel.Application excelApp = new Excel.ApplicationClass(); Excel.Workbooks workBooks = excelApp.Workbooks; excelApp.DisplayAlerts = false; Excel.Workbook workBook = workBooks.Open(sourceFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, ‘;’, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); workBook.SaveAs(csvFilePath, Excel.XlFileFormat.xlCSV, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); workBook.Close(false, sourceFile, null); excelApp.DisplayAlerts = true; Excel.Application app = excelApp.Application; app.Quit(); Marshal.ReleaseComObject(workBooks); […]

如何比较两个大型CSV文件并获取差异文件

我需要逐行比较2个csv(大文件)并在单独的文件中写入差异行。 一个文件中的行可以出现在第二个文件中的任何位置。 我需要比较整行。 有什么指针吗?

使用StreamWriter将标头添加到CSV输出文件中

我正在尝试将标头添加到CSV文件中,作为标题,我希望在WriteLine使用变量名称。 在这里你有我的代码: using (StreamWriter file = new StreamWriter(fs)) { for (int s = 0; s < pr.Length; ++s) { string[] UsersIDS = new string[] {""}; UsersIDS = db.GetUsersList(pr[s].ProjectID); file.WriteLine( pr[s].ProjectID + '"' + ',' + '"' + pr[s].ProjectTitle + '"' + ',' + pr[s].PublishStatus + '"' + ',' + UsersIDS.Length); } }

在csv文件中保存数据

我有一个问题是在.csv文件中保存数据。 void WriteLog(DataRow rzad) { StreamWriter sw = new StreamWriter(“log.csv”, true); int iColCount = 8; for (int i = 0; i < iColCount; i++) { if (!Convert.IsDBNull(rzad[i])) { sw.Write(rzad[i].ToString()); sw.Write("\t"); } } sw.Write("\n"); sw.Flush(); sw.Close(); } 问题是文件中我有A列中的数据。 我想将DataRow格式的一行粉碎成8个部分,这些部分放在8个不同的列中。 我的function正常工作,因为它没有看到标签(“\ t”)。 我无法发布图片,所以我尝试在csv文件中描述结果: 2011-03-17 14:34:11asdPrzekroczono krytyczną minimalną wymaganą wartość parametru5010050080550 这是我的示例行,我想将其粉碎为8列: 2011-03-17 14:34:11 asd Przekroczono krytyczną minimalną […]