我想使用空格定界符(“”)计算文本文件中的单词数,但是我很挣扎。
Dim counter = 0
Dim delim = " "
Dim fields() As String
fields = Nothing
Dim line As String
line = Input
While (SR.EndOfStream)
line = SR.ReadLine()
End While
Console.WriteLine(vbLf & "Reading File.. ")
fields = line.Split(delim.ToCharArray())
For i = 0 To fields.Length
counter = counter + 1
Next
SR.Close()
Console.WriteLine(vbLf & "The word count is {0}", counter)
我不知道如何打开文件并执行此操作,这非常令人困惑;请解释一下,以便我对其进行编辑和理解。
答案 0 :(得分:1)
您将要读取文件作为数据源,因此让我们创建一个变量来引用其文件名:
Dim srcFile = "C:\temp\twolines.txt"
正如您已经显示的,需要一个变量来保存找到的单词数:
Dim counter = 0
要从文件中读取,StreamReader将完成此工作。现在,我们来看一下它的文档化(是的,是的),并注意到它具有一种Dispose
方法。这意味着我们必须先明确对其进行处理,以确保在下次重启计算机之前不会占用系统资源(例如,可能存在“ {{3} }“)。幸运的是,有memory leak构造可以为我们解决这个问题:
Using sr As New StreamReader(srcFile)
现在我们要逐行遍历文件的内容,直到文件结尾:
While Not sr.EndOfStream
然后,我们要读取一行,并找到一行包含空格的项目:
counter += sr.ReadLine().Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Length
+=
运算符就像说“将n加到a”而不是说“ a = a + n”。 {" "c}
是字符“”的文字数组。 c
告诉它是一个字符,而不是一个字符的字符串。 StringSplitOptions.RemoveEmptyEntries
意味着如果有"one two"
的文本,它将忽略多余的空格。
因此,如果您正在编写一个控制台程序,它可能看起来像:
Imports System.IO
Module Module1
Sub Main()
Dim srcFile = "C:\temp\twolines.txt"
Dim counter = 0
Using sr As New StreamReader(srcFile)
While Not sr.EndOfStream
counter += sr.ReadLine().Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Length
End While
End Using
Console.WriteLine(counter)
Console.ReadLine()
End Sub
End Module
任何装饰,如写出数字代表什么或进行错误检查,都由您决定。
答案 1 :(得分:0)
使用Path.Combine,您不必担心斜杠或反斜杠的位置。您可以使用Environment类轻松获得特殊文件夹的路径。 System.IO的File类是共享的,因此您不必创建实例。
Public Sub Main()
Dim p As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Chapters.txt")
Debug.Print(Environment.SpecialFolder.MyDocuments.ToString)
Dim count As Integer = GetCount(p)
Console.WriteLine(count)
Console.ReadKey()
End Sub
Private Function GetCount(Path As String) As Integer
Dim s = File.ReadAllText(Path)
Return s.Split().Length
End Function
答案 2 :(得分:-1)
使用Split函数,然后直接获取结果数组的长度并将其加1。