大家好日子,
我在使用File Helper进行CSV解析时遇到问题。我的CSV看起来像这样
,,, 026642,0,00336,05,19,“WATERMELON *”,19,“1”,,,,,,,, 0 ,, 001.99。,0 ,,,,, 0,,0 ,0 ,,,,,,,,,,,,,,,,,, 51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,, 026645,0,00338,05,19,“ONION”,19,“* 1”,,,,,,,, 0 ,, 002.99。,0 ,,,,, 0,0,0, ,,,,,,,,,,,,,,,,, 51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,, 026687,0,00380,05,19,“MUSHROOM”,19,“(BLACK FUNGUS)”,,,,,,,, 0 ,, 021.90。,0 ,,,,, 0,,0, 0 ,,,,,,,,,,,,,,,,,, 51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
这个CSV有116列/字段。
问题是我只需要整行4个字段
Field 4 = 026687,Field 9 =“WATERMELON *”,Field 11 =“(BLACK FUNGUS)”,Field 21 = 002.99。
当我使用向导制作实例类的非常好的解决方案时,我将FieldValueDiscarded _置于其他所有字段的顶部,我不需要它,它只是打印与CSV输入相同。
请给我一些建议如何只提取所需的字段以写入输出。
谢谢
更新:经过一番研究后,我终于明白了这个错误。发生此错误是因为类非继承所以我无法将特定字段转换为另一个类。通过声明映射类作为继承类,我可以得到特定的字段。
但是,我坚持如何检索继承自映射类的类中的函数。这是我的代码 `Imports System.Text 进口System.IO 导入FileHelpers
Public Class ProcessField:Inherits InputCSV
Public Function MyPLUc(ByVal value As Integer)
Dim PLUc As String
MyBase.PLU = value
PLUc = (0 + 0 + value)
Return (0 + 0 + value)
End Function
Public Function MyStatusc(ByVal value As Integer)
MyBase.Status = value
Dim Status As Integer
If value > 0 Then
Status = 800
Else
Status = 900
End If
Return (0 + Status)
End Function
Public Function MyUnitPricec(ByVal value As Integer)
MyBase.UnitPrice = value
Dim UP As Integer
UP = value
Dim bytes As Byte() = System.Text.Encoding.Unicode.GetBytes(UP)
Return (0 + 0 + 0 + UP)
End Function
Public Function MyLabelFormat(ByVal value As Integer)
Return (1 + 1)
End Function
Public Function MyEAN(ByVal value As Integer)
Return (0 + 6)
End Function
Public Function MyCName(ByVal value As String)
MyBase.CName1 = value
Dim hexString As String = Hex(value)
Return (hexString)
End Function
Public Function MyBCC(ByVal value As String)
value = (0 + 0)
Return (0 + 0)
End Function
结束课程
问题是如何检索这些函数中的所有返回值
答案 0 :(得分:2)
我不确定我理解你的问题,但我认为你的事情比你需要的更复杂。
您可以使用116个字符串字段创建FileHelpers类。它们应该是(公共)字段,而不是属性。您不应该继承FileHelpers类。不要尝试将FileHelpers类用作普通类(即,使用属性,函数等,子类)。 将FileHelpers类视为仅限CSV格式的“规范”。
要导入,请编写如下内容:
Dim engine As New FileHelperEngine(GetType(RecordSpec))
' To Read Use:
Dim results As RecordSpec() = DirectCast(engine.ReadFile("FileIn.txt"), RecordSpec())
然后你有一个RecordSpec
的数组。每个RecordSpec将填充所有116个字段,但只是忽略您不需要的字段。然后遍历结果并使用值执行任何操作。例如,您可能需要将导入的字段映射到另一个(更正常的)MyProduct
类,其中包含属性而不是字段,并且可能还有其他逻辑。
For Each recordSpec As RecordSpec In results
Dim myProduct = New MyProduct()
myProduct.Id = recordSpec.Field4
myProduct.Name = recordSpec.Field9
myProduct.Category = recordSpec.Field23
' etc.
Next
总结:RecordSpec
类只应用于定义CSV文件的结构。您可以使用它来填充包含文件中所有值的简单数组。然后,您将值映射到更有用的类MyProduct
。