Helo那里!
似乎我在VB.net中遇到了我的代码问题。请耐心等待,因为我是一名完整的编程初学者。我正在尝试编写一个程序,它将加载2个或更多txt文件,查找和排除特定行(从某些字符开始或包含一些字符),然后合并并保存一个文件,其中包含编辑后的所有信息(从所有文件)。
我正在使用openfiledialog,我已将multiselect设置为true。下面是OpenfileDialog的代码:
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
For Each File In OpenFileDialog1.FileNames
My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
Next
如果我是正确的,它会加载文件名并从文件中读取所有文本。对于编辑,我使用以下代码:
Dim outputLines As New List(Of String)()
For Each line As String In System.IO.File.ReadLines(OpenFileDialog1.FileName)
Uline1 = line.StartsWith("text1")
Uline2 = line.StartsWith("text2")
Uline3 = line.StartsWith("text3")
Uline4 = line.StartsWith("text4")
Uline5 = line.StartsWith("text5")
Uline6 = line.StartsWith("text7")
Uline7 = line.StartsWith("sometext")
Trash = line.Contains("^")
If Uline1 Or Uline2 Or Uline3 Or Uline4 Or Uline5 Or Uline6 Or Uline7 Or Trash Then
outputLines.Remove(line)
Else
outputLines.Add(line)
End If
Next
对于输出我正在使用带有以下代码的savefiledialog:
SaveFileDialog1.DefaultExt = "txt"
SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
SaveFileDialog1.RestoreDirectory = True
If (SaveFileDialog1.ShowDialog() = DialogResult.OK) Then
System.IO.File.WriteAllLines(SaveFileDialog1.FileName, outputLines)
虽然文件正确加载,但编辑似乎只发生在一个文件中(最后一个选中),并且程序再次只保存一个文件。
你能指点我正确的方向吗?
答案 0 :(得分:1)
您需要通过打开文件对话框返回的文件名以及ReadLines
调用返回的行来嵌套循环。您也不需要从outputLines
列表中删除行,因为它们永远不会被添加。类似的东西:
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim outputLines As New List(Of String)()
For Each fileName In OpenFileDialog1.FileNames
For Each line As String In System.IO.File.ReadLines(fileName)
Uline1 = line.StartsWith("text1")
Uline2 = line.StartsWith("text2")
Uline3 = line.StartsWith("text3")
Uline4 = line.StartsWith("text4")
Uline5 = line.StartsWith("text5")
Uline6 = line.StartsWith("text7")
Uline7 = line.StartsWith("sometext")
Trash = line.Contains("^")
If Not (Uline1 Or Uline2 Or Uline3 Or Uline4 Or Uline5 Or Uline6 Or Uline7 Or Trash) Then
outputLines.Add(line)
End If
Next
Next
End If
如果文件非常大,您将开始遇到内存问题,并且需要在读取数据时将数据写出来,而不是将其全部保存在内存中。
<强>更新强>
根据评论,如果你想检查以下行以确定是否应该写入当前行,你可以使用这样的东西。请注意使用ReadAllLines
和For
循环。
Dim outputLines As New List(Of String)()
For Each fileName In OpenFileDialog1.FileNames
Dim lines() As String = System.IO.File.ReadAllLines(fileName)
For i As Integer = 0 To lines.Count - 1
Dim line As String = lines(i)
If line.StartsWith("19") AndAlso i < lines.Count - 2 AndAlso lines(i + 1).StartsWith("15") Then
outputLines.Add(line)
outputLines.Add(lines(i + 1))
i += 1
End If
Next
Next