使用空格分隔符计算外部文件中的单词

时间:2019-03-23 16:01:12

标签: vb.net count character delimiter

我想使用空格定界符(“”)计算文本文件中的单词数,但是我很挣扎。

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)

我不知道如何打开文件并执行此操作,这非常令人困惑;请解释一下,以便我对其进行编辑和理解。

3 个答案:

答案 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。