【问题标题】:parse several field using file helper使用文件助手解析几个字段
【发布时间】:2023-03-17 14:30:02
【问题描述】:

祝大家今天好,

我在使用 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 输入相同的内容。

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

谢谢

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

但是,我坚持如何检索从映射类继承的类中的函数。这是我的代码 `导入 System.Text 导入系统.IO 导入 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

结束类`

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

【问题讨论】:

    标签: vb.net filehelpers


    【解决方案1】:

    我不确定我是否理解你的问题,但我认为你让事情变得比你需要的更复杂。

    您可以创建包含 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多