有一个文本文件,其记录超过10,000行。
每行以特定数字开头,如1,2,3,4和5.每个数字表示它是标题,主数据,文件详细信息,页脚等。
因此,我们需要找出以特定字符开头的行号,以便我可以指定该值来读取特定事物的文本行。
答案 0 :(得分:3)
在每一行添加一个递增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.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个字段OperationNumberNumber
和LineText
。现在,所有内容都安排在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