标签: filehelpers

CSV文件中的列标题使用fileHelpers库?

FileHelper库中是否有内置字段属性,它会在最终生成的CSV中添加标题行?

我用Google搜索并没有找到太多信息.目前我有这个:

DelimitedFileEngine _engine = new DelimitedFileEngine(T);
_engine.WriteStream
        (HttpContext.Current.Response.Output, dataSource, int.MaxValue);
Run Code Online (Sandbox Code Playgroud)

它工作,但没有标题.

我正在考虑FieldTitleAttribute使用类似的属性并将其用作列标题.

所以,我的问题是,我在哪一点检查属性并插入标题列?以前有人做过类似的事吗?

我想插入标题并使用与实际字段名称不同的自定义文本,只需在对象的每个成员上都有一个属性:

[FieldTitleAttribute("Custom Title")]
private string Name
Run Code Online (Sandbox Code Playgroud)

并且可能是一个选项,告诉引擎在生成时插入标题.

因此,当WriteStream或者WriteString被调用时,标题行将与自定义标题插入.

我找到了几个DelimitedFileEngine的事件,但不是检测当前记录是第一行以及如何在此之前插入行的最佳方法.

c# csv filehelpers

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

FileHelpers:如何跳过读取固定宽度文本的第一行和最后一行

下面的代码用于使用ASP.NET MVC2中的FileHelpers读取固定宽度的上载文件内容文本文件

第一行和最后一行的长度较小,因此ReadStream会导致异常.所有其他线都有适当的固定宽度.如何跳过第一行和最后一行或其他方式来读取数据无异常?

    [FixedLengthRecord()]
    class Bank
    {
        [FieldFixedLength(4)]
        public string AINETUNNUS;
        [FieldFixedLength(16)]
        public string TEKST1;
        [FieldFixedLength(3)]
        public string opliik;
        [FieldFixedLength(2)]
        public string hinnalis;
    };

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize]
    public ActionResult LoadStatement(HttpPostedFileBase uploadFile)
    {

        FileHelperEngine engine = new FileHelperEngine(typeof(Bank));
        var res = engine.ReadStream(new StreamReader(uploadFile.InputStream,
             Encoding.GetEncoding(1257))) as Bank[];
  }
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc filehelpers

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

使用FileHelpers发出导入CSV文件的问题

我正在使用FileHelpers库将csv文件导入数据库表.我在导入文件时遇到问题,该文件的字段以文件头中的数字('800NUMBER')开头.

导入代码:
DataTable data = CommonEngine.CsvToDataTable(file, ',');

例外:
FileHelpers.FileHelpersException: The string '800NUMBER' not is a valid .NET identifier. at FileHelpers.RunTime.FieldBuilder..ctor(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.CsvClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName) at FileHelpers.RunTime.CsvClassBuilder..ctor(CsvOptions options) at FileHelpers.CsvEngine.CsvToDataTable(String filename, String classname, Char delimiter, Boolean hasHeader) at FileHelpers.CommonEngine.CsvToDataTable(String filename, Char delimiter)

我不确定是否有办法逃脱列名称,如'[800NUMBER]'.

列名称无法更改,因为这是客户端向我们提供的方式.

谢谢你,
-Oleg


通过分别从'data'行读取'header'行解决了这个问题.然后,我更改'data'中的列名并使用SqlBulkCopy导入数据库.

    FileHelpers.CsvOptions options = new FileHelpers.CsvOptions("ImportRecord", ',', file);
    options.HeaderLines = 0;        

    FileHelpers.CsvEngine engine = new FileHelpers.CsvEngine(options);

    engine.Options.IgnoreFirstLines = 0; 
    DataTable header = engine.ReadStringAsDT(FileHelpers.CommonEngine.RawReadFirstLines(file, …
Run Code Online (Sandbox Code Playgroud)

c# csv filehelpers

12
推荐指数
1
解决办法
7517
查看次数

什么是FileHelpers .NET库的最新生产就绪版本,它在哪里?

SourceForge页面 - www.filehelpers.net - 最后一次更新于2007年,没有可用的下载.

Github repo - github.com/MarcosMeli/FileHelpers - 看起来很新,但最后一个标记版本是2.1

有一个NuGet包 - www.nuget.org/packages/FileHelpers-Stable - 但它已经两年了,而且不属于主要开发者Marcos Meli.有一个竞争的NuGet包 - www.nuget.org/packages/FileHelpers - 标记为2.0.0并由Marcos Meli拥有,但该代码已有 6年历史.

TeamCity版本可用.有一个成功的开发版本标记为2.9.16.

我应该将哪一项用于生产就绪项目?或者是其他地方的最新生产版本?

编辑

我从github master克隆了,但它没有构建 - 充满了错误.我经历了在所有子项目上将.NET版本设置为4.5并修复了一些导入并让向导运行,但仍然有几十个警告.所以Github头显然不是生产就绪的版本.

编辑2

现在版本3.1已准备就绪,GitHub存储库是最新的,并使用CI进行连续构建从www.filehelpers.net下载最新版本

.net c# filehelpers

11
推荐指数
1
解决办法
1658
查看次数

C# - FileHelper FieldConverter例程可以引用记录中的其他字段吗?

我正在使用优秀的FileHelpers库来处理固定长度的航空公司计划文件.

我有一个日期字段,然后是记录中的几个字段,一个时间字段.

我想在FileHelpers记录类中结合这两个,并知道有一个自定义FieldConverter属性.使用此属性,您可以提供自定义函数来处理字段数据并实现StringToFieldFieldToString.

我的问题是:我是否可以将其他字段(已经阅读过)传递给该客户FieldConverter,因此我可以将日期和时间结合在一起.FieldConverter有一个实现,允许您引用自定义处理类和"其他字符串"甚至是一个对象数组.但是,鉴于这是在属性定义中完成的,我正在努力访问这个早期字段引用.

[FieldFixedLength(4)]  
[FieldConverter(typeof(MyTimeConverter),"eg. ScheduledDepartureDate")]  
public DateTime scheduledDepartureTime;
Run Code Online (Sandbox Code Playgroud)

c# filehelpers fixed-length-record

10
推荐指数
1
解决办法
1984
查看次数

使用FileHelpers处理引号

我正在使用优秀的FileHelpers库导入许多csv文件,但遇到了问题.我有一个带有这三个示例行的csv文件

id,text,number
120,"good line this one",789
121,""not good" line", 4456
122,,5446
Run Code Online (Sandbox Code Playgroud)

和这个(例子)类

  [IgnoreFirst(1)]
  [IgnoreEmptyLines()]
  [DelimitedRecord(",")]
  public sealed class JOURNAL
  {
    public Int32 ID;

    [FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)]
    public string TEXT;

    public Int32? NUMBER;
  }
Run Code Online (Sandbox Code Playgroud)

问题QuoteMode.AlwaysQuoted是ID 122将失败并出现错误:

字段'TEXT'不是以第3行的QuotedChar开头.您可以使用FieldQuoted(QuoteMode.OptionalForRead)来允许可选的引用字段

切换到QuoteMode.OptionalForRead将失败,ID为121错误:

字段TEXT被引用但引用的字符:"不在分隔符之前(您可以使用[FieldTrim]来避免此错误)

那么如何处理一个没有引号的空字段的csv和文本中带引号的带引号的文本字段?

csv quotes import filehelpers

10
推荐指数
1
解决办法
6708
查看次数

FileHelpers和CSV:当记录可以水平扩展无限制时该怎么办

我正在尝试使用FileHelpers解析这种类型的CSV文件:

Tom,1,2,3,4,5,6,7,8,9,10
Steve,1,2,3
Bob,1,2,3,4,5,6
Cthulhu,1,2,3,4,5
Greg,1,2,3,4,5,6,7,8,9,10,11,12,13,14
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用FileHelpers解析它.我想我应该可以这样做:

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    public List<int> Values;
}
Run Code Online (Sandbox Code Playgroud)

但FileHelpers似乎无法做到这一点.我能做的最好的就是:

[DelimitedRecord(",")]
public class MyRecord
{
    public string Name;

    public string Values;

    public string[] ActualValuesInNiceArray
    {
        get { return Values.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我需要Values在逗号上拆分以获取每条记录的值集.如果我必须手动解析每个记录的一部分,那么使用FileHelpers似乎没什么意义.

我错过了什么吗?我已经浏览了文档/示例,但似乎无法找到我的格式的解决方案.Excel对我的格式没有任何问题,所以我想有一种方法可以使用现有的免费库(FileHelpers或其他一些库)来实现.有任何想法吗?

.net csv filehelpers

9
推荐指数
1
解决办法
4058
查看次数

如何使用FileHelpers库将大型SQL Server表导出为CSV文件?

我想使用C#和FileHelpers库将大型SQL Server表导出为CSV文件.我也可以考虑C#和bcp,但我认为FileHelpers比bcp更灵活.速度不是特殊要求. 在下面的代码运行时OutOfMemoryException抛出storage.ExtractRecords()(一些不太重要的代码被省略):

  SqlServerStorage storage = new SqlServerStorage(typeof(Order));
    storage.ServerName = "SqlServer"; 
    storage.DatabaseName = "SqlDataBase";
    storage.SelectSql = "select * from Orders";
    storage.FillRecordCallback = new FillRecordHandler(FillRecordOrder);
    Order[] output = null;
    output = storage.ExtractRecords() as Order[];
Run Code Online (Sandbox Code Playgroud)

运行以下代码时,会在以下情况下抛出"Timeout expired" link.ExtractToFile():

 SqlServerStorage storage = new SqlServerStorage(typeof(Order));
    string sqlConnectionString = "Server=SqlServer;Database=SqlDataBase;Trusted_Connection=True";
    storage.ConnectionString = sqlConnectionString;
    storage.SelectSql = "select * from Orders";
    storage.FillRecordCallback = new FillRecordHandler(FillRecordOrder);
    FileDataLink link = new FileDataLink(storage);
    link.FileHelperEngine.HeaderText = headerLine;
    link.ExtractToFile("file.csv");
Run Code Online (Sandbox Code Playgroud)

SQL查询运行的时间超过默认值30秒,因此超时异常.不幸的是,我在FileHelpers文档中找不到如何将SQL命令超时设置为更高的值.

我可以考虑在小数据集上循环SQL选择,直到导出整个表,但过程太复杂了.有没有一种直接的方法在大型数据库表导出时使用FileHelpers?

c# filehelpers

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

在FileHelper中跳过列

使用.Net 的FileHelper库,我可以以某种方式跳过源文件中的多个列吗?

根据文档和示例,我必须为所有列添加字段.唉,我有一个excel表,有216列可以导入,只需要13个.

.net csv filehelpers

8
推荐指数
2
解决办法
3346
查看次数

FileHelpers - 如何读取®字符?

我正在读取CSV文件,一切正常.所有字段都会转到正确的位置,但它会将®转换为 .

var engine = new FileHelperEngine(typeof(T));
return engine.ReadStream(new StreamReader(stream)) as T[];
Run Code Online (Sandbox Code Playgroud)

有关如何防止这种情况发生的任何想法?

编辑:

在花钱的帮助下,我得到了这个工作:

var engine = new FileHelperEngine(typeof(T), Encoding.UTF8);
return engine.ReadStream(new StreamReader(stream, Encoding.UTF8)) as T[];
Run Code Online (Sandbox Code Playgroud)

我必须在两个地方设置编码才能工作.否则我看到了奇怪的结果.

c# filehelpers

8
推荐指数
1
解决办法
1987
查看次数

标签 统计

filehelpers ×10

c# ×7

csv ×5

.net ×3

asp.net-mvc ×1

fixed-length-record ×1

import ×1

quotes ×1