1

祝大家好日子,

我在使用 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,"蘑菇",19," (黑木耳)",,, ,,,,,0,,021.90.,0,,,,,0,,0,0,,,,,,,,,,,,,,,,,,51,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,

这个 CSV 有 116 列/字段。

问题是我只需要整行中的 4 个字段

字段 4 = 026687,字段 9 =“WATERMELON *”,字段 11 =“(黑木耳)”,字段 21 = 002.99。

当我使用创建实例类的非常好的解决方案的向导时,我将 FieldValueDiscarded _ 放在我不需要的所有其他字段之上,它只打印与 CSV 输入相同的内容。

请给我一些建议,我如何仅提取需要的字段以写入输出。

谢谢

更新:经过更多研究,我终于弄清楚了这个错误。发生此错误是因为类未继承,因此我无法将特定字段放入另一个类。通过将映射类声明为继承类,我可以获得特定的字段。

但是,我坚持如何检索从映射类继承的类中的函数。这是我的代码`Imports System.Text Imports System.IO Imports FileHelpers

公共类 ProcessField :继承 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

结束类`

问题是我如何在这些函数中检索所有返回值

4

1 回答 1

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()) 

Then you have an array of RecordSpec. Each RecordSpec will have all 116 fields populated, but just ignore the fields you don't need. Then loop through the results and do whatever you want with the values. For instance, perhaps you need to map the imported fields to another (more normal) MyProduct class with properties instead of fields and perhaps with additional logic.

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

In summary: the RecordSpec class should only be used to define the structure of the CSV file. You use it to populate a simple array with all the values from the file. You then map the values to a more useful class MyProduct.

于 2012-10-15T12:15:42.027 回答