指定水平和垂直移动
Specify Horizontal and Vertical Movement
我希望能够在管道(“|”)分隔的文本文件中移动,同时控制我读取的行和列。
我之前已经在 MS Access VBA 中实现了这一点,目前正在 VB.NET 中开始,但正在努力完成这一点。
在 Access 中,VBA 允许我 link 将文本文件作为记录集 (Dim rs As DAO.Recordset
),预定义为分隔并在行中移动 (rs.MoveNext
或 rs.MovePrevious
) 同时选择我需要的 fields/columns (rs!Field1
).
VB.NET中是否有任何等价物?到目前为止,我只能从 MSDN 中找到以下内容,但不知道如何操作它:
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters("|")
Dim currentrow As String()
While Not MyReader.EndOfData
currentrow = MyReader.ReadFields()
Dim currentfield As String
For Each currentfield In currentrow
MsgBox(currentfield)
Next
End While
End Using
我希望能够将某些字段存储到变量中,以便稍后写入 .CSV 文件。
对于这可能有所帮助的任何人,我在以下两个网站的帮助下设法解决了这个问题:
Loop Through Files in Directory
使用这些我创建了以下按钮点击子和伴随功能:
Private Sub Button_Run_Click(sender As Object, e As EventArgs) Handles Button_Run.Click
' Make a reference to a directory
Dim strDir As String = ("C:\")
Dim Dir As New System.IO.DirectoryInfo(strDir)
' Get a reference to each file in that directory
Dim fiArr As System.IO.FileInfo() = Dir.GetFiles()
Dim fri As System.IO.FileInfo
'For each file call the formatter to write to a text file
'Then delete each file after writing it
For Each fri In fiArr
Call Formatter(strDir & fri.Name)
My.Computer.FileSystem.DeleteFile(strDir & fri.Name)
Next fri
End Sub
然后我用分隔符分隔每一行,其中每个字段都可以获得(使用定义的 values(0)
变量),并修改(使用它的索引)。控制线就像使用或通过更改 i
整数来修改现有变量来创建新变量一样简单。例如:
Dim Nvalues() As String = lines(i + 1).Split("|")
使用这个我创建了以下函数:
Public Sub Formatter(ByVal FName As String)
'Standard start defining stream reader to loop
'through and pull data from text files
'FName is provided from the form button sub
Dim StrReader As New System.IO.StreamReader(FName)
Dim text As String = StrReader.ReadToEnd
StrReader.Close()
Dim lines() As String = text.Split(vbLf)
'Define all variables that may need to be stored before writing
Dim x1, x2, x3, x4, x5, x6, x7, x8, x9, x0 As String
'Define where the data will be written to (line by line)
Dim FPath As String = "C:\Sample.txt"
If Not System.IO.File.Exists(FPath) Then
System.IO.File.Create(FPath).Dispose()
End If
Dim objwriter As System.IO.StreamWriter
'Set loop to go through all data from beginning to end using i as line index
Dim i As Double
For i = 0 To lines.Length - 1
'Split each line by pipes (|) allowing "values" to be indexed to pull by column
Dim values() As String = lines(i).Split("|")
'Set 1st column in row as switch item
Select Case values(0)
'If 1st column in row is 001, store required data in variables
'specified using the index of the value to give accurate column
Case "001"
x1 = values(1)
x2 = values(2)
x3 = values(3)
x3 = values(4)
'Repeat same as 001 but for 002
Case "002"
x4 = values(1)
x5 = values(2)
'Repeat same as 001 but for 003
Case "003"
x6 = values(1)
x7 = values(2)
'Write to file including fields 1 & 3 from 004 group
Case "004"
objwriter = System.IO.File.AppendText(FPath)
objwriter.WriteLine(x1 & "," & x2 & "," & x3 & "," & x4 _
& "," & x5 & "," & x6 & "," & x7 & "," _
& Nvalues(1) & "," & Nvalues(2))
objwriter.Close()
Case Else
End Select
Application.DoEvents()
Next
End Sub
我希望能够在管道(“|”)分隔的文本文件中移动,同时控制我读取的行和列。
我之前已经在 MS Access VBA 中实现了这一点,目前正在 VB.NET 中开始,但正在努力完成这一点。
在 Access 中,VBA 允许我 link 将文本文件作为记录集 (Dim rs As DAO.Recordset
),预定义为分隔并在行中移动 (rs.MoveNext
或 rs.MovePrevious
) 同时选择我需要的 fields/columns (rs!Field1
).
VB.NET中是否有任何等价物?到目前为止,我只能从 MSDN 中找到以下内容,但不知道如何操作它:
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters("|")
Dim currentrow As String()
While Not MyReader.EndOfData
currentrow = MyReader.ReadFields()
Dim currentfield As String
For Each currentfield In currentrow
MsgBox(currentfield)
Next
End While
End Using
我希望能够将某些字段存储到变量中,以便稍后写入 .CSV 文件。
对于这可能有所帮助的任何人,我在以下两个网站的帮助下设法解决了这个问题:
Loop Through Files in Directory
使用这些我创建了以下按钮点击子和伴随功能:
Private Sub Button_Run_Click(sender As Object, e As EventArgs) Handles Button_Run.Click
' Make a reference to a directory
Dim strDir As String = ("C:\")
Dim Dir As New System.IO.DirectoryInfo(strDir)
' Get a reference to each file in that directory
Dim fiArr As System.IO.FileInfo() = Dir.GetFiles()
Dim fri As System.IO.FileInfo
'For each file call the formatter to write to a text file
'Then delete each file after writing it
For Each fri In fiArr
Call Formatter(strDir & fri.Name)
My.Computer.FileSystem.DeleteFile(strDir & fri.Name)
Next fri
End Sub
然后我用分隔符分隔每一行,其中每个字段都可以获得(使用定义的 values(0)
变量),并修改(使用它的索引)。控制线就像使用或通过更改 i
整数来修改现有变量来创建新变量一样简单。例如:
Dim Nvalues() As String = lines(i + 1).Split("|")
使用这个我创建了以下函数:
Public Sub Formatter(ByVal FName As String)
'Standard start defining stream reader to loop
'through and pull data from text files
'FName is provided from the form button sub
Dim StrReader As New System.IO.StreamReader(FName)
Dim text As String = StrReader.ReadToEnd
StrReader.Close()
Dim lines() As String = text.Split(vbLf)
'Define all variables that may need to be stored before writing
Dim x1, x2, x3, x4, x5, x6, x7, x8, x9, x0 As String
'Define where the data will be written to (line by line)
Dim FPath As String = "C:\Sample.txt"
If Not System.IO.File.Exists(FPath) Then
System.IO.File.Create(FPath).Dispose()
End If
Dim objwriter As System.IO.StreamWriter
'Set loop to go through all data from beginning to end using i as line index
Dim i As Double
For i = 0 To lines.Length - 1
'Split each line by pipes (|) allowing "values" to be indexed to pull by column
Dim values() As String = lines(i).Split("|")
'Set 1st column in row as switch item
Select Case values(0)
'If 1st column in row is 001, store required data in variables
'specified using the index of the value to give accurate column
Case "001"
x1 = values(1)
x2 = values(2)
x3 = values(3)
x3 = values(4)
'Repeat same as 001 but for 002
Case "002"
x4 = values(1)
x5 = values(2)
'Repeat same as 001 but for 003
Case "003"
x6 = values(1)
x7 = values(2)
'Write to file including fields 1 & 3 from 004 group
Case "004"
objwriter = System.IO.File.AppendText(FPath)
objwriter.WriteLine(x1 & "," & x2 & "," & x3 & "," & x4 _
& "," & x5 & "," & x6 & "," & x7 & "," _
& Nvalues(1) & "," & Nvalues(2))
objwriter.Close()
Case Else
End Select
Application.DoEvents()
Next
End Sub