使用文件助手解析几个字段

时间:2012-10-12 07:28:47

标签: vb.net filehelpers

大家好日子,

我在使用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

结束课程

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

1 个答案:

答案 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