Подсчет слов во внешнем файле с использованием разделителя пробела - PullRequest
0 голосов
/ 23 марта 2019

Я хочу рассчитать количество слов в текстовом файле, используя разделитель пробела (""), однако я изо всех сил.

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 ]

1 голос
/ 23 марта 2019

Вы собираетесь читать файл как источник данных, поэтому давайте создадим переменную, которая будет ссылаться на его имя файла:

Dim srcFile = "C:\temp\twolines.txt"

Как вы уже показали, переменная необходима дляудерживайте количество найденных слов:

Dim counter = 0

Чтобы прочитать из файла, StreamReader выполнит эту работу.Теперь мы смотрим на документацию для него (да, действительно) и замечаем, что у него есть метод Dispose.Это означает, что мы должны явно утилизировать его после того, как мы его использовали, чтобы убедиться, что никакие системные ресурсы не связаны до следующей перезагрузки компьютера (например, может произойти утечка памяти "" ").К счастью, для этого позаботится конструкция Using:

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.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

Любые украшения, такие как запись числа и проверка ошибок, остаются за вами.

0 голосов
/ 24 марта 2019

С Path.Combine вам не нужно беспокоиться о том, куда идут косые черты или косые черты.Вы можете легко найти путь к специальным папкам, используя класс Environment.Класс File System.IO является общим, поэтому вам не нужно создавать экземпляр.

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
0 голосов
/ 23 марта 2019

Используйте функцию Split, затем непосредственно получите длину массива результатов и добавьте к нему 1.

...