如何在VB.NET?

时间:2017-07-01 05:56:12

标签: sql-server vb.net ssis etl flat-file

有一个文本文件,其记录超过10,000行。

每行以特定数字开头,如1,2,3,4和5.每个数字表示它是标题,主数据,文件详细信息,页脚等。

因此,我们需要找出以特定字符开头的行号,以便我可以指定该值来读取特定事物的文本行。

2 个答案:

答案 0 :(得分:3)

SSIS解决方案

在每一行添加一个递增1的变量,并使用Substring函数检查第一个字符。

假设第一列名称为Column0

您可以在DataFlow任务中添加脚本组件并使用类似的代码:(使用Vb.Net)

Dim intR As Integer = 0

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)


    intR += 1

    If Not Row.Column0_IsNull AndAlso
           Not String.IsNullOrEmpty(Row.Column0.Trim) Then

        Select Case Row.Column0.Substring(0, 1)


            Case "1"

                'Line number is stored in intR

            Case "2"

                ...

           Case Else


        End Select

    End If




End Sub

简单的Vb app解决方案

如果使用vb.net应用程序,您可以使用StreamReader逐行读取文本文件

Using sr as new Io.StreamReader("C:\File1.txt")

    Dim intR as Integer = 0

    While Not sr.EndOfStream

        intR += 1

        dim strLine as string = sr.ReadLine()

        Select Case strLine.Substring(0,1)

            Case "1"
               'Line number is stored in intR

            Case "2"

            ...


        End Select

    End While


End Using

答案 1 :(得分:1)

如果需要操作,我会将所有数据保存在数据结构中(在我的示例HashSet中)。每行作为Line对象(Structure Line)包含2个字段OperationNumberNumberLineText。现在,所有内容都安排在hashset中,您可以以有效的方式操作,排序,使用Linq或Lambda表达式等。

Private fileData As New HashSet(Of Line)

Private Sub Foo()
    Dim TextLine As String = String.Empty
    Dim objReader As New System.IO.StreamReader(FilePath)

    Do While objReader.Peek() <> -1
        ' read line '
        TextLine = objReader.ReadLine()
        If Not (String.IsNullOrEmpty(TextLine)) Then
        ' create line object '
        Dim line = New Line()
        ' extract the line number '
        line.OperationNumberNumber = TextLine.Substring(0, 1)
        ' extract the line text '
        line.LineText = TextLine.Substring(1, TextLine.Length - 1)
        ' save to hashset '
        fileData.Add(line)
        End If
    Loop

End Sub

Structure Line
    Public OperationNumberNumber As Integer
    Public LineText As String
End Structure