我有一个2列的csv文件: 11111,0001.jpg 22222,0002.jpg 33333,0003.jpg
我正在visual studio 2013中构建一个visual basic windows窗体应用程序。该应用程序将在一侧有一个文本框和浏览按钮。文本框显示使用浏览按钮选择的文件位置。在应用程序的另一侧是两个列表框。我有listbox1显示我的csv文件的第一列。我想第二个列表框,listbox2,只显示我的csv文件的第二列中的最后4个字符。到目前为止,这是我的代码。我不知道如何选择字段中的某些字符。
Public Class Form1
Dim streamer As IO.StreamReader
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
ListBox2.Items.Clear()
Dim ofd1 As New OpenFileDialog
If ofd1.ShowDialog() = Windows.Forms.DialogResult.OK Then
TextBox1.Text = ofd1.FileName
End If
streamer = IO.File.OpenText(ofd1.FileName)
Label3.Text = IO.File.ReadAllLines(ofd1.FileName).Length
Dim MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(ofd1.FileName)
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
MyReader.Delimiters = New String() {","}
Dim currentRow As String()
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
ListBox1.Items.Add(currentRow(0))
ListBox2.Items.Add(currentRow(1))
Catch ex As Exception
End Try
End While
End Sub
答案 0 :(得分:0)
只需使用string.Substring和string.Length
的组合ListBox2.Items.Add(currentRow(1).Substring(currentRow(1).Length - 4))
以扩展形式进行相同的操作并对长度值进行一些检查
Dim startPos = currentRow(1).Length - 4
If startPos < 0 Then
startPos = 0
End If
Dim last4CharString = currentRow(1).Substring(startPos)
ListBox2.Items.Add(last4CharString)
顺便说一句,我想你可以删除这些行 (您只是为了发现存在的行读取整个文件,然后使用TextFieldParser再次读取它)
streamer = IO.File.OpenText(ofd1.FileName)
Label3.Text = IO.File.ReadAllLines(ofd1.FileName).Length
而是在TextFieldParser循环中使用lineCounter
并在每个循环中递增它
然后将最终值设置为Label文本。
Dim lineCounter = 0
While Not MyReader.EndOfData
....
lineCounter +=1
End While
Label3.Text = lineCounter.ToString