标签: csvhelper

在C#中,如何从字符串创建TextReader对象(无需写入磁盘)

我正在使用快速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)

如果这是正确的方法,任何想法?再次感谢你的帮助!

c# csv textreader csvhelper

115
推荐指数
4
解决办法
8万
查看次数

CsvHelper没有向内存流写任何东西

我有以下方法:

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)

c# csvhelper

34
推荐指数
5
解决办法
2万
查看次数

为什么我不能从“System.IO.StreamWriter”转换为“CsvHelper.ISerializer”?

试图将人们的内容写入 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)

c# csvhelper .net-core

31
推荐指数
1
解决办法
1万
查看次数

使用CSVHelper将流输出到浏览器

我正在尝试使用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格式的数据.但浏览器似乎仍然不知道如何处理它 - 没有为用户提供下载选项.

.net csv asp.net-mvc csvhelper

29
推荐指数
1
解决办法
2万
查看次数

在CsvHelper中如何捕获转换错误并知道它发生在哪个字段和哪一行?

CsvReader成功地使用了这个类并且对它很满意,但是,我使用的文件是由一个更改列格式而不让我知道的组生成的.

所以,有一瞬间一切正常,然后第二天早上事情中断并且try catch块会csv.GetRecord<MyType>()捕获错误并记录错误,但是我无法从Exception实例中收集任何有价值的信息.它只是说:"无法进行转换." 与InnerException无关.不是很有用.我甚至不知道我的150列中的哪一列导致了问题.

你能帮我弄清楚如何确定哪一行导致问题的哪一列?

谢谢

csvhelper

29
推荐指数
2
解决办法
1万
查看次数

如何将C#映射类创建为csvhelper

我有一个包含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/

非常感谢

更新2

适合我的解决方案是:

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)

.net c# csv csvhelper

21
推荐指数
1
解决办法
3万
查看次数

使用CsvHelper获取列名列表的最佳方法是什么?

我正在尝试将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)

c# csv parsing csvhelper

20
推荐指数
2
解决办法
5417
查看次数

解析标头包含CsvHelper空格的CSV

我有一个带有字段标题的CSV文件,其中一些包含两个或三个用空格分隔的单词:

电子表格应用程序中电子表格的前几行的屏幕截图,包括包含空格的标题,如上所述.

您可以在上面的图片中看到包含空格的字段标题:
"Time of Day","Process Name"和"Image Path".

当我尝试通过调用读取CSV reader.GetRecords<DataRecord>();(DataRecord我已定义的类在哪里)时,我收到错误:

CSV文件中不存在字段'TimeOfDay'."*

这是因为我的DataRecord类不能包含带空格的成员.

如何使用CsvHelper解析CSV文件?

c# csv csvhelper

19
推荐指数
2
解决办法
8576
查看次数

使用CsvHelper将CSV中的所有值读入List

所以我一直在阅读我不应该编写自己的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# csv csvhelper

19
推荐指数
3
解决办法
7万
查看次数

使用C#中的CsvHelper写入文件

我试图在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文件.
最后一行丢失了.
你能帮忙吗?

c# csvhelper

18
推荐指数
3
解决办法
4万
查看次数

标签 统计

csvhelper ×10

c# ×8

csv ×6

.net ×2

.net-core ×1

asp.net-mvc ×1

parsing ×1

textreader ×1