Как удалить первые и последние строки из текстового файла в Visual Basic - PullRequest
2 голосов
/ 20 января 2010

Я видел сообщения об удалении строк из текстового файла, которые указаны как параметр функции, но мне нужно только удалить первую и последнюю строки из файла.

Я все еще новичок, когда дело доходит до работы с файлами, но кажется, что просто удалить первую строку ... Просто удалите весь текст из BOF до первого символа CrLf. Я прав?

Что касается последней строки, я понимаю, что мне нужно получить количество строк в текстовом файле, чтобы найти его (так как файл не всегда будет иметь x количество строк). Здесь мне действительно нужна помощь.

N.B. Я использую VB.NET 2005

Ответы [ 3 ]

4 голосов
/ 20 января 2010

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

    Dim listText As New List(Of String)
    Dim objLine As String = ""

    Using objReader As StreamReader = New StreamReader("c:\test.txt")
        Do
            objLine = objReader.ReadLine()
            If objLine IsNot Nothing Then listText.Add(objLine)
        Loop Until objLine Is Nothing
    End Using

    Using objWriter As StreamWriter = New StreamWriter("c:\testOutput.txt")
        For I As Integer = 1 To listText.Count - 2
            objWriter.WriteLine(listText.Item(I))
        Next
    End Using

Отредактируйте, чтобы удовлетворить самого разборчивого:

    Dim arrText() As String
    Dim sLine As String = ""

    arrText = File.ReadAllLines("c:\test.txt")

    Using objWriter As StreamWriter = New StreamWriter("c:\testOutput.txt")
        For I As Integer = 1 To arrText.Length - 2
            objWriter.WriteLine(arrText(I))
        Next
    End Using
1 голос
/ 20 января 2010

Это удалить последнюю строку, не читая весь файл.Возможно, вам придется изменить логику так, чтобы EOF был символом новой строки ...

    Dim fs As New FileStream("c:\test.txt", FileMode.Open, FileAccess.ReadWrite)
    Dim b(1) As Byte

    Do
        fs.Seek(fs.Length - 2, SeekOrigin.Begin) 'seek 2 bytes from EOF
        fs.Read(b, 0, 2) 'read last two bytes
        'are they newline
        If System.Text.Encoding.ASCII.GetString(b, 0, 2) <> Environment.NewLine Then
            fs.SetLength(fs.Length - 1) 'set length to -1
        Else
            fs.SetLength(fs.Length - 2)
            Exit Do
        End If
    Loop
    fs.Close()
1 голос
/ 20 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...