我正在使用快速CSV阅读器将一些粘贴的文本解析为网页.Fast CSV阅读器需要一个TextReader对象,而我所拥有的只是一个字符串.在运行中将字符串转换为TextReader对象的最佳方法是什么?
谢谢!
更新 - 示例代码 - 在原始示例中,新的StreamReader正在查找名为"data.csv"的文件.我希望通过TextBox_StartData.Text提供它.
使用下面的代码不会编译.
TextReader sr = new StringReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(new StreamReader(sr), true))
{
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
该new StreamReader(sr)告诉我它有一些无效的参数.有任何想法吗?
作为替代方法,我试过这个:
TextReader sr = new StreamReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(sr, true))
{
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个Illegal characters in path Error.这里是TextBox_StartData.Text中的字符串示例:
Fname\tLname\tEmail\nClaude\tCuriel\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n
Run Code Online (Sandbox Code Playgroud)
如果这是正确的方法,任何想法?再次感谢你的帮助!
我有以下方法:
public byte[] WriteCsvWithHeaderToMemory<T>(IEnumerable<T> records) where T : class
{
using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords<T>(records);
return memoryStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
使用对象列表调用哪个 - 最终来自数据库,但由于某些东西不起作用,我只是填充静态集合.传递的对象如下:
using CsvHelper.Configuration;
namespace Application.Models.ViewModels
{
public class Model
{
[CsvField(Name = "Field 1", Ignore = false)]
public string Field1 { get; set; }
[CsvField(Name = "Statistic 1", Ignore = false)]
public int Stat1{ get; set; }
[CsvField(Name = "Statistic 2", Ignore = false)] …Run Code Online (Sandbox Code Playgroud) 试图将人们的内容写入 CSV 文件,然后将其导出,但是我遇到了构建错误并且失败了。错误是:
cannot convert from 'System.IO.StreamWriter' to 'CsvHelper.ISerializer'
不知道为什么会发生这种情况,除非我确定我已经这样做了很多次。
private void ExportAsCSV()
{
using (var memoryStream = new MemoryStream())
{
using (var writer = new StreamWriter(memoryStream))
{
using (var csv = new CsvHelper.CsvWriter(writer))
{
csv.WriteRecords(people);
}
var arr = memoryStream.ToArray();
js.SaveAs("people.csv",arr);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CSVHelper生成CSV文件并将其发送回浏览器,因此用户可以选择保存位置和文件名并保存数据.
该网站是基于MVC的.这里是我用于调用的jQuery按钮代码(数据是DTO列表的一些序列化Json表示):
$.ajax({
type: "POST",
url: unity.baseUrl + "common/ExportPayments",
data: data
});
Run Code Online (Sandbox Code Playgroud)
这是控制器代码:
[HttpPost]
public FileStreamResult ExportPayments()
{
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
CsvWriter writer = new CsvWriter(sw);
List<Payment_dto> pd = _commonService.GetPayments();
foreach (var record in pd)
{
writer.WriteRecord(record);
}
sw.Flush();
return new FileStreamResult(ms, "text/csv");
}
Run Code Online (Sandbox Code Playgroud)
这似乎完全没有实现 - 调用方法步骤到正确的代码位但响应是空的,更不用说为用户提供文件对话框来保存数据.我已经完成了这段代码,它从服务中恢复数据,写入并且不会抛出任何错误.那么我做错了什么?
编辑:回来这个......
return File(ms.GetBuffer(), "text/csv", "export.csv");
Run Code Online (Sandbox Code Playgroud)
...给我一个响应,包括我期待的csv格式的数据.但浏览器似乎仍然不知道如何处理它 - 没有为用户提供下载选项.
我CsvReader成功地使用了这个类并且对它很满意,但是,我使用的文件是由一个更改列格式而不让我知道的组生成的.
所以,有一瞬间一切正常,然后第二天早上事情中断并且try catch块会csv.GetRecord<MyType>()捕获错误并记录错误,但是我无法从Exception实例中收集任何有价值的信息.它只是说:"无法进行转换." 与InnerException无关.不是很有用.我甚至不知道我的150列中的哪一列导致了问题.
你能帮我弄清楚如何确定哪一行导致问题的哪一列?
谢谢
我有一个包含40列的csv文件,我想使用csvhelper将其加载到数据表中.安装库后,我这样做了:
using (TextReader reader = File.OpenText(fileName)) {
var csv = new CsvReader(reader);
while (csv.Read()) {
var farmID = csv.GetField(0);
Console.WriteLine(farmID);
}
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我有一个控制台声明,它完美无缺.
但是,csvReader有一个构造函数,它使用自定义类将数据直接加载到它.
我试过这个:
var record = csv.GetRecord<CSVFileDefinition>();
Run Code Online (Sandbox Code Playgroud)
但我得到了这个例外
No properties are mapped for type 'MyProjectName.CSVFileDefinition'.
Run Code Online (Sandbox Code Playgroud)
因为CSVFileDefinition是一个空类.
我的问题是如何填补这个课程.
这是图书馆:
http://joshclose.github.io/CsvHelper/
非常感谢
适合我的解决方案是:
sealed class CSVFileDefinitionMap : CsvClassMap<CSVFileDefinition>
{
public CSVFileDefinitionMap()
{
Map(m => m.FRM_ID).Name("FARM ID");
Map(m => m.FRM_OWNER).Name("FARM OWNER ");
}
}
class CSVFileDefinition
{
public string FRM_ID { get; set; }
public string FRM_OWNER { get; set; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将CsvHelper用于项目.我浏览了文档,但是我找不到用单一方法读取所有列名的方法.如何使用CsvHelper轻松获取所有列标题名称的列表?我现在这样做,但我认为有更好的方法.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CsvHelper;
using System.IO;
namespace Kg
{
class Program
{
static void Main(string[] args)
{
using (var reader = new StreamReader(@"myfile.csv"))
{
var csv = new CsvReader(reader);
csv.Read();
var has_header = true;
var csv_headers = new List<string>();
var header_index = 0;
while (has_header)
{
has_header = csv.TryGetField<string>(header_index, out string header_name);
if (has_header)
{
header_index += 1;
csv_headers.Add(header_name);
}
}
Console.WriteLine(csv_headers.Count);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有字段标题的CSV文件,其中一些包含两个或三个用空格分隔的单词:

您可以在上面的图片中看到包含空格的字段标题:
"Time of Day","Process Name"和"Image Path".
当我尝试通过调用读取CSV reader.GetRecords<DataRecord>();(DataRecord我已定义的类在哪里)时,我收到错误:
CSV文件中不存在字段'TimeOfDay'."*
这是因为我的DataRecord类不能包含带空格的成员.
如何使用CsvHelper解析CSV文件?
所以我一直在阅读我不应该编写自己的CSV读写器,所以我一直在尝试使用通过nuget安装的CsvHelper库.CSV文件是灰度图像,行数是图像高度,数字列是宽度.我想将行值逐行读入单个List<string>或List<byte>.
我到目前为止的代码是:
using CsvHelper;
public static List<string> ReadInCSV(string absolutePath)
{
IEnumerable<string> allValues;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
allValues = csv.GetRecords<string>
}
return allValues.ToList<string>();
}
Run Code Online (Sandbox Code Playgroud)
但是allValues.ToList<string>()扔了一个:
用户代码未处理CsvConfigurationException
CsvHelper.dll中出现"CsvHelper.Configuration.CsvConfigurationException"类型的异常,但未在用户代码中处理
附加信息:继承IEnumerable的类型无法自动映射.您是否意外调用了对单个记录执行操作的GetRecord或WriteRecord,而不是调用作为记录列表的GetRecords或WriteRecords?
GetRecords可能期望我自己的自定义类,但我只是想将值作为一些原始类型或字符串.此外,我怀疑整行正在转换为单个字符串,而不是每个值都是一个单独的字符串.
我试图在C#中使用CsvHelper写入CSV文件.
这是图书馆http://joshclose.github.io/CsvHelper/的链接
我在网站上使用了代码.
这是我的代码:
var csv = new CsvWriter(writer);
csv.Configuration.Encoding = Encoding.UTF8;
foreach (var value in valuess)
{
csv.WriteRecord(value);
}
Run Code Online (Sandbox Code Playgroud)
它只将一部分数据写入csv文件.
最后一行丢失了.
你能帮忙吗?