0

私は整数データのテキストファイルを持っています。つまり、

00201305170013333
01201305170013333
02201305170013333

各行の 2 番目と 3 番目の位置を、各行の 6 番目と 7 番目のインデックスと交換したいと考えています。スワップ手法を適用しましたが、どういうわけか新しい文字列が更新されません。

コードを見てください:

Imports System
Imports System.IO
Imports System.Collections
Module Module1
    Sub Main()
        Dim reader As StreamReader = New StreamReader("input.txt")
        Dim sLine As String = ""
        Dim arrText As New ArrayList()
        Do
            sLine = reader.ReadLine()
            If Not sLine Is Nothing Then
                arrText.Add(sLine)
            End If
        Loop Until sLine Is Nothing
        reader.Close()
        Dim varReplace As Integer
        Dim arrTextToString(arrText.Count) As String
        For varReplace = 0 To arrText.Count - 1
            arrTextToString(varReplace) = arrText(varReplace).ToString()
        Next

                Dim rep As Integer
                For rep = 0 To arrText.Count - 1
                    Dim two, three, mix1, mix2, six, seven As String
                    Dim str = arrText(rep)
                    two = (str(2))
                    three = (str(3))
                    six = (str(6))
                    seven = (str(7))
                    mix1 = two
                    two = six
                    six = mix1
                    mix2 = three
                    three = seven
                    seven = mix2


                    str(2) = two.ToString()
                    str(3) = three.ToString()
                    str(6) = six.ToString()
                    str(7) = seven.ToString()

                    Console.Write(two)
                    Console.Write(three)
                    Console.Write(" ")
                    Console.Write(six)
                    Console.Write(seven)
                    Console.Write(" ")
                    Console.WriteLine(str)
                Next
                'For pri = 0 To arrText.Count - 1
                'Console.WriteLine(arrTextToString(pri))
                'Next


        Console.ReadLine()
    End Sub
End Module
4

3 に答える 3

0

文字列は不変であり、変更することはできません。文字列の一部を変更しようとした行で、コードが生成するコンパイル エラーに気付いたかもしれません。

str(2) = two.ToString()

結果:

MissingMemberException: プロパティ 'Chars' は読み取り専用です。

したがって、文字列を変更するたびに新しい文字列を作成する必要があります。


また、 を使用しTextFieldParserてデータを読み取り、単純な を使用してスワッピングを行うことをお勧めしますString.Format

例:

Sub Main
    Dim result = From fields In ReadData("c:\your\path\input.txt")
                 Select String.Format("{0}{3}{2}{1}{4}", fields)

    For Each line in result     ' note that result is lazy '
        Console.WriteLine(line) ' Do whatever '
    Next
End Sub

Iterator Function ReadData(filename As String) As IEnumerable(Of String())
    Using parser = new TextFieldParser(filename) With { .TextFieldType = FieldType.FixedWidth }
        ' read the data in fields of a specific length '
        ' so we can later simply swap the 2nd with the 4th field '
        parser.SetFieldWidths(1, 2, 2, 2, -1)
        While Not parser.EndOfData
            Yield parser.ReadFields()
        End While
    End Using
End Function
于 2013-08-29T08:48:35.773 に答える
0

文字列を操作しています。文字列は、自動的に元のオブジェクトへのポインターではありません。これは基本的にあなたがしていることです。

  • 文字列の配列をループします。
  • 文字列 str = 配列のコピー[rep].
  • str で更新を実行する
  • エンドループ

あなたがする必要があるのは:

  • arrText[rep] = str

そしてあなたは大丈夫なはずです。

于 2013-08-29T06:49:05.990 に答える