Помогите Visual Basic смешивать символы - PullRequest
0 голосов
/ 27 августа 2011

Я делаю приложение, которое меняет положение двух символов в Word.

Imports System.IO
Module Module1

Sub Main()


    Dim str As String = File.ReadAllText("File.txt")
    Dim str2 As String() = Split(str, " ")
    For i As Integer = 0 To str2.Length - 1
        Dim arr As Char() = CType(str2(i), Char())

        For ia As Integer = 0 To arr.Length() - 1 Step 2
            Dim pa As String
            pa = arr(ia + 1)
            arr(ia + 1) = arr(ia)
            arr(ia) = pa
        Next ia
        For ib As Integer = 0 To arr.Length - 1
            Console.Write(arr(ib))
            File.WriteAllText("File2.txt", arr(ib))
        Next ib
        File.WriteAllText("File2.txt", " ")
        Console.Write(" ")

    Next i
    Console.Read()

End Sub

End Module

Например:

Input: ab
Output: ba
Input: asdasd asdasd
Output: saadds saadds

Программа работает хорошо, хорошо смешивает символы,но он не записывает текст в файл.Он будет писать текст в консоли, но не в файле.

Примечание: программа работает только со словами, которые делятся на 2, но это не проблема.Кроме того, он не возвращает сообщение об ошибке.

1 Ответ

2 голосов
/ 27 августа 2011

Ваш код перезаписывает файл, который вы уже написали, с одним пробелом (" ") каждый раз.

Вы должны открыть файл только один раз и добавить к нему потоковую запись:

Using output = File.CreateText("file2.txt")
    ' Put the for loop here.    
End Using

Есть и другие проблемы с вашим кодом. Во-первых, используйте For Each вместо For, это делает ваш код намного более простым и читаемым. Во-вторых, старайтесь по возможности избегать циклов For. Например, вместо того, чтобы перебирать символы для вывода их по одному, просто создайте новую строку из массива char и напишите это:

Dim shuffledWord As New String(arr)
output.Write(shuffledWord)

Некоторые из ваших типов совершенно неверны, то есть вы используете String местами вместо Char. Вы должны всегда использовать Option Strict On. Тогда компилятор не допустит такого кода.

Вы также должны предпочесть использовать каркасные методы, а не методы, специфичные для VB. Это облегчает понимание программистам на C #, а также упрощает перевод и изменение (то есть, используйте метод строк Split вместо свободной функции, используйте ToCharArray вместо приведения к Char()… ).

Наконец, используйте значимые имена переменных. str, str2 и arr особенно загадочны, потому что они не сообщают читателю кода ничего интересного о переменных.

Sub Main()
    Dim text As String = File.ReadAllText("File.txt")
    Dim words As String() = str.Split(" "c)
    Using output = File.CreateText("file2.txt")
        For Each word In words
            dim wordChars = word.ToCharArray()

            For i As Integer = 0 To wordChars.Length - 1 Step 2
                Dim tmp As Char = wordChars(i + 1)
                wordChars(i + 1) = wordChars(i)
                arr(i) = tmp
            Next

            Dim shuffledWord As New String(wordChars)
            output.Write(shuffledWord + " ")
            Console.Write(huffledWord + " ")
        Next
    End Using
    Console.Read()
End Sub
...