我有一个 csv 文件,我正在使用 FileHelpers 进行解析,并且我遇到了引号和逗号都可以出现在字段中的情况:
逗号:
323,"PC","28/02/2014","UNI001","5000",0,"Return","Returned Goods, damaged",88.00,15.40,"T1","N",0.00,"R","-",
Run Code Online (Sandbox Code Playgroud)
引用
148,"SI","13/01/2014","CGS001","4000",1,"5","17" Monitor",266.00,45.39,"T1","Y",311.39,"R","-",
Run Code Online (Sandbox Code Playgroud)
我的班级是:
[DelimitedRecord(",")]
public class Transaction
{
public int TRAN_NUMBER;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string TypeText;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string DATE;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string TransactionAccount;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string NOMINAL_CODE;
public int DEPT_NUMBER;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string INV_REF;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string DETAILS;
public string NET_AMOUNT;
public string TAX_AMOUNT;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string TaxCodeName;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string PAID_FLAG;
public string AMOUNT_PAID;
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string VatReconText;
[FieldQuoted('"', QuoteMode.OptionalForBoth)] …Run Code Online (Sandbox Code Playgroud) 当要使用ExcelStorage.ExtractRecords导入的Excel工作表的第一个单元格为空时,该过程将失败.IE浏览器.如果数据从第1行第2行开始,如果单元格(2,1)具有空值,则该方法失败.
有人知道如何解决这个问题吗?我已经尝试将FieldNullValue属性添加到映射类中,但没有运气.
这是一个示例项目,显示有问题的代码
希望有人可以帮助我或指出一些方向.
谢谢!
我正在尝试加载CSV文件(delims是';',引号是''').
我已成功创建了所有内容(向导工具很棒),但有一件事我无法找到解决方案.
基本上,我有一个整数(System.Int32)列.理论上,大多数记录在该列中将具有正整数值.但是,有时我可能会在该列中遇到值"N/A".我想要实现的是,当FileHelpers在该列中遇到"N/A"时,它会分配一个默认值(-1可以正常工作).
有谁知道这是否可能?
PS:我可能需要为System.DateTime字段做同样的事情(有时候它也可能有"N/A").
我尝试读取csv文件.我的第五个记录是一个日期:03/11/2008
这是我的一段代码:
[FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
public DateTime datum_5;
Run Code Online (Sandbox Code Playgroud)
我的代码崩溃了:
Result[] results= (Result[])engine.ReadFile(@"..\Data\expo.txt");
Run Code Online (Sandbox Code Playgroud)
并且有以下例外:行:1.列:41.字段:datum_5.错误将'03/11/2008'转换为类型:'DateTime'.使用格式:'dd/MM/yyyy'
当我这样做:
[FieldConverter(typeof(ConvertDate))]
public DateTime datum_5;
Run Code Online (Sandbox Code Playgroud)
有了这个:
internal class ConvertDate : ConverterBase
{
/// <summary>
/// different forms for date separator : . or / or space
/// </summary>
/// <param name="from">the string format of date - first the day</param>
/// <returns></returns>
public override object StringToField(string from)
{
DateTime dt;
if (DateTime.TryParseExact(from, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
return dt;
if (DateTime.TryParseExact(from, "dd/MM/yyyy", null, DateTimeStyles.None, out dt))
return dt;
if …Run Code Online (Sandbox Code Playgroud) 我正在使用FileHelpers库的2.0版,它被记录为能够处理.NET 2.0 Nullable类型.
我正在使用文档中示例中给出的代码:
[DelimitedRecord("|")]
public class Orders
{
public int OrderID;
public DateTime? OrderDate;
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime? RequiredDate;
public int? ShipVia;
}
Run Code Online (Sandbox Code Playgroud)
使用FileHelperEngine,我可以成功读入一个没有OrderDate,RequiredDate或ShipVia字段值的文件.该文件看起来像:
1 |||
但是,我无法将生成的Orders []写出到文件中 - 库会抛出NullReferenceException,堆栈跟踪如下:
位于FileHelpers.Field上的FileHelpers.FieldBase.BaseFieldString(Object fieldValue)中的FileHelpers.FieldBase.AssignToString(StringBuilder sb,Object fieldValue)位于FileHelpers的FileHelpers.ConvertHelpers.CultureConverter.FieldToString(Object from) .RecordInfo.RecordToString(对象记录)在FileHelpers.FileHelperEngine 1.WriteStream(TextWriter writer, IEnumerable1记录,Int32 maxRecords)在FileHelpers.FileHelperEngine 1.WriteFile(String fileName, IEnumerable1记录,Int32 maxRecords)在FileHelpers.FileHelperEngine 1.WriteFile(String fileName, IEnumerable1记录)在TestingFileHelpers.Program.Main(String [] args)在C:位于System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)的System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args)中的\ dev\src\TestingFileHelpers\TestingFileHelpers\Program.cs:第19行System.Threading.ExecutionContext.Run上的System.Threading.ThreadHelper.ThreadStart_Context(Object state)中的.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()(Executi)System.Threading.ThreadHelper.ThreadStart()上的System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)中的onContext executionContext,ContextCallback回调,Object state,Boolean ignoreSyncCtx)
我敢肯定我必须在这里遗漏一些东西,但我无法弄清楚它是什么.任何帮助非常感谢.
我想知道如何在文件管理器中执行多个日期?看来你必须指定你要支持的每种格式(有点糟糕......希望它可以处理更多基本格式).
[FieldOrder(1), FieldConverter(ConverterKind.DateMultiFormat, "MM/dd/yyyy", "MM/d/yyyy", "M/d/yyyy","M/dd/yyyy")]
Run Code Online (Sandbox Code Playgroud)
这给了我一些
Error 35 Argument 1: cannot convert from 'FileHelpers.ConverterKind' to 'System.Type'
Run Code Online (Sandbox Code Playgroud)
所以我似乎要做一些自定义转换或什么?它是否正确?
编辑
我使用的是2.9.9.0版
选项
// Summary:
// Indicates the FileHelpers.ConverterKind used for read/write operations.
//
// Remarks:
// See the Complete attributes list for more information and examples of each
// one.
[AttributeUsage(AttributeTargets.Field)]
public sealed class FieldConverterAttribute : Attribute
{
// Summary:
// Indicates the FileHelpers.ConverterKind used for read/write operations.
//
// Parameters:
// converter:
// The FileHelpers.ConverterKind used …Run Code Online (Sandbox Code Playgroud) FileHelpers有一个很好的字段日期转换器:
[FieldConverter(ConverterKind.Date, "MM-dd-yyyy")]
public DateTime MyDate;
Run Code Online (Sandbox Code Playgroud)
但FieldConverter不适用于属性.我必须处理使用属性的对象,所以我正在寻找这样的东西:
[PropertyConverter(ConverterKind.Date, "MM-dd-yyyy")]
public DateTime MyDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
如何使用属性执行此操作?
我正在使用FileHelper 2.0来解析我的csv数据.filehelper有没有可以正确处理转义分隔符的选项?它可以将字段标识为数据而不是分隔符.
我们的csv格式:使用\来转义逗号(,)
示例数据:
姓名,姓氏
尼科\,文件,opeka
当前代码:
[DelimitedRecord(",")]
public class contactTemplate
{
public string firstName;
public string lastName;
}
Run Code Online (Sandbox Code Playgroud)
我如何获得firstName = nico,le和lastName = opeka.FileHelpers按逗号分割,现在返回:
firstName - > nico \
lastName - >,le,opeka
我最近的项目要求我阅读 csv 文件。人们引导我使用文件助手,因为“你不应该重新发明轮子”。但是,文档真的很烂,我似乎找不到处理可选引号的方法。这是我的 csv:
2734000585,IDR,04/04/2016,04/04/2016,0000000,1010,SETOR TUNAI,"783275305006511 VENDY",,"820,000.00","5,820,000.00"
Run Code Online (Sandbox Code Playgroud)
我不是在 csv 之上生成的人,它来自银行。正如您所看到的,他们的 csv 文件很糟糕并且有一些严重的问题。有些字符串用引号括起来,有些则不是。此外,货币值被编码为字符串。
我为它做了一个类:
using System;
using FileHelpers;
[DelimitedRecord(",")]
public class ImporBii
{
public long RekNum;
public string Currency;
[FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
public DateTime TransDate;
[FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
public DateTime RecordDate;
public string Unused1;
public int TransCode;
public string TransCodeStr;
public string Keterangan;
[FieldConverter(ConverterKind.Decimal, "#,##0.00")]
public decimal Debet;
[FieldConverter(ConverterKind.Decimal, "#,##0.00")]
public decimal Kredit;
[FieldConverter(ConverterKind.Decimal, "#,##0.00")]
public decimal Saldo;
}
Run Code Online (Sandbox Code Playgroud)
我认为 filehelpers 足够聪明,可以自己看到引号,但结果是彻底的灾难。请帮我。:-(
假设我有以下 FileHelpers Record 定义:
[DelimitedRecord(",")]
[IgnoreEmptyLines]
public class TestRecord
{
[FieldCaption("A")]
[FieldQuoted(QuoteMode.OptionalForBoth)]
public string A;
[FieldCaption("B")]
[FieldQuoted(QuoteMode.OptionalForBoth)]
public string B;
[FieldCaption("C")]
[FieldQuoted(QuoteMode.OptionalForBoth)]
public string C;
}
Run Code Online (Sandbox Code Playgroud)
我只对 A、B、C 列感兴趣。它们后面的任何列都可以忽略。例如,我希望能够处理这样的数据:
A,B,C,D,E
TestA1,TestB1,TestC1,TestD1,TestE1
TestA2,TestB1,TestC1,TestD1,TestE1
Run Code Online (Sandbox Code Playgroud)
或者:
A,B,C,D
TestA1,TestB1,TestC1,TestD1
TestA2,TestB1,TestC1,TestD1
Run Code Online (Sandbox Code Playgroud)
或者:
A,B,C
TestA1,TestB1,TestC1
TestA2,TestB1,TestC1
Run Code Online (Sandbox Code Playgroud)