我有一个.csv文件(我无法控制数据),由于某种原因,它有引号中的所有内容.
"Date","Description","Original Description","Amount","Type","Category","Name","Labels","Notes"
"2/02/2012","ac","ac","515.00","a","b","","javascript://"
"2/02/2012","test","test","40.00","a","d","c",""," "
Run Code Online (Sandbox Code Playgroud)
我正在使用filehelpers,我想知道删除所有这些引用的最佳方法是什么?有什么东西说"如果我看到引号删除.如果没有找到引号什么都没做"?
这与数据混淆,因为我将有"\"515.00\""不必要的额外引号(特别是因为我想在这种情况下它是一个十进制而不是一个字符串".
我也不确定"javascript"是什么以及为什么它被生成但是这是来自我无法控制的服务.
编辑 这是我使用csv文件的方式.
using (TextReader textReader = new StreamReader(stream))
{
engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
object[] transactions = engine.ReadStream(textReader);
}
Run Code Online (Sandbox Code Playgroud)
您可以FieldQuoted在此处使用属性页面上最佳描述的属性.请注意,该属性可以应用于任何FileHelpers字段(即使它键入Decimal).(请记住,FileHelpers类描述了导入文件的规范.因此,当您在文件中标记一个Decimal字段时FieldQuoted,将引用该字段.)
您甚至可以指定引号是否可选
[FieldQuoted('"', QuoteMode.OptionalForBoth)]
Run Code Online (Sandbox Code Playgroud)
这是一个适用于您的数据的控制台应用程序:
class Program
{
[DelimitedRecord(",")]
[IgnoreFirst(1)]
public class Format1
{
[FieldQuoted]
[FieldConverter(ConverterKind.Date, "d/M/yyyy")]
public DateTime Date;
[FieldQuoted]
public string Description;
[FieldQuoted]
public string OriginalDescription;
[FieldQuoted]
public Decimal Amount;
[FieldQuoted]
public string Type;
[FieldQuoted]
public string Category;
[FieldQuoted]
public string Name;
[FieldQuoted]
public string Labels;
[FieldQuoted]
[FieldOptional]
public string Notes;
}
static void Main(string[] args)
{
var engine = new FileHelperEngine(typeof(Format1));
// read in the data
object[] importedObjects = engine.ReadString(@"""Date"",""Description"",""Original Description"",""Amount"",""Type"",""Category"",""Name"",""Labels"",""Notes""
""2/02/2012"",""ac"",""ac"",""515.00"",""a"",""b"","""",""javascript://""
""2/02/2012"",""test"",""test"",""40.00"",""a"",""d"",""c"","""","" """);
// check that 2 records were imported
Assert.AreEqual(2, importedObjects.Length);
// check the values for the first record
Format1 customer1 = (Format1)importedObjects[0];
Assert.AreEqual(DateTime.Parse("2/02/2012"), customer1.Date);
Assert.AreEqual("ac", customer1.Description);
Assert.AreEqual("ac", customer1.OriginalDescription);
Assert.AreEqual(515.00, customer1.Amount);
Assert.AreEqual("a", customer1.Type);
Assert.AreEqual("b", customer1.Category);
Assert.AreEqual("", customer1.Name);
Assert.AreEqual("javascript://", customer1.Labels);
Assert.AreEqual("", customer1.Notes);
// check the values for the second record
Format1 customer2 = (Format1)importedObjects[1];
Assert.AreEqual(DateTime.Parse("2/02/2012"), customer2.Date);
Assert.AreEqual("test", customer2.Description);
Assert.AreEqual("test", customer2.OriginalDescription);
Assert.AreEqual(40.00, customer2.Amount);
Assert.AreEqual("a", customer2.Type);
Assert.AreEqual("d", customer2.Category);
Assert.AreEqual("c", customer2.Name);
Assert.AreEqual("", customer2.Labels);
Assert.AreEqual(" ", customer2.Notes);
}
}
Run Code Online (Sandbox Code Playgroud)
(注意,你的第一行数据似乎有8个字段而不是9个,所以我用Notes字段标记了FieldOptional).
| 归档时间: |
|
| 查看次数: |
3890 次 |
| 最近记录: |