1

テキストファイルから他のテキストファイルに特定の行を抽出したい。私は次のコードを使用しています

    Imports System.IO



Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim Tr As IO.TextReader = System.IO.File.OpenText("C:\Assignment.txt")
        For c As Integer = 1 To 10

            If c = 7 Then
                Dim MyFileLine As String = Split(Tr.ReadToEnd(), vbCrLf)(c) & vbCrLf
                Tr.Close()



                Dim TW As System.IO.TextWriter
                'Create a Text file and load it into the TextWriter 
                TW = System.IO.File.CreateText("C:\Assignment1.txt")
                TW.WriteLine(MyFileLine)
                'Flush the text to the file 
                TW.Flush()
                'Close the File 
                TW.Close()
            End If

        Next c
    End Sub
End Class

しかし、このコードは、8、9、10、14、15、16行も抽出したい7行目だけを抽出します。正しい解決策を教えてください。よろしくお願いします。

4

1 に答える 1

1

ここにはいくつかの問題があるようです。それらを修正してから、以下で説明します。

Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim currentLine As String
        Dim lineCounter As Integer = 1
        Dim lineNumbersRequired As List(Of Integer) = New List(Of Integer)
        lineNumbersRequired.Add(7)
        lineNumbersRequired.Add(8)
        lineNumbersRequired.Add(9)
        lineNumbersRequired.Add(10)
        lineNumbersRequired.Add(14)
        lineNumbersRequired.Add(15)
        lineNumbersRequired.Add(16)

        Dim TW As System.IO.TextWriter
        'Create a Text file and load it into the TextWriter 
        TW = System.IO.File.CreateText("C:\Assignment1.txt")

        Using Tr As IO.TextReader = New IO.StreamReader("C:\Assignment.txt")
            While Not Tr.EndOfStream
                If lineNumbersRequired.Contains(lineCounter) Then
                    Dim MyFileLine As String = Split(currentLine, vbCrLf)(c) & vbCrLf
                    TW.WriteLine(MyFileLine)
                End If
                lineCounter = lineCounter + 1
            End While
        End Using

        TW.Flush()
        'Close the File 
        TW.Close()

    End Sub
End Class

注:コードはテストされていませんが、コンパイルエラーがいくつか発生した場合は、かなり近いはずです。

では、ここで行ったことの概要を簡単に説明します。

  1. forループが1から10まで実行されていたため、Forループをしばらくに変更しました。これが機能したとしても、ファイルの10行目以降を読み取ることはありません。そこで、TextReaderがファイル内のすべての行を読み取ったときに終了するwhileループに変更しました。また、ファイルから読み取られた現在の行が、currentLineと呼ばれる新しい変数に追加されました。
  2. これで、新しいcurrentLine変数を使用して、書き込みファイルの行にデータを入力できます。
  3. 保持したい行番号を保持する整数のリストを追加しました。次に、whileループ内に、処理時に各行をカウントするカウンターがあり、このカウンターが保存したい行番号のリスト内にある場合出力ファイルに入力すると、現在の行が出力されます。

乗り方を教えてください。さらに説明が必要な場合は、お問い合わせください。

于 2012-08-14T08:03:52.170 に答える