Удалить строку в TXT-файле, но сохранить все остальное - PullRequest
1 голос
/ 23 марта 2011

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

Примером этого может быть:

SDfmifgn349234024jn4tnge0b04tnEFGm34tmn34t0egonkerglnk
318erg4nergpERGhmboergn4t34tmg054
fg94t34tskmsdglnEGgjr894ERG94mrg34tSDFS$45352ty
GGreerkg0gm4m505556g0fdg6555fbd105f1g

И, скажем, я хотел удалить 318erg4nergpERGhmboergn4t34tmg054 и, следовательно, он будет сохранен как:

SDfmifgn349234024jn4tnge0b04tnEFGm34tmn34t0egonkerglnk
fg94t34tskmsdglnEGgjr894ERG94mrg34tSDFS$45352ty
GGreerkg0gm4m505556g0fdg6555fbd105f1g

Но я не могу понять, как это сделать!

Я попробовал этот код ниже, который нашел:

    Dim dir As New DirectoryInfo(defaultNetworkDrive)

            For Each file As FileInfo In dir.GetFiles()
                If file.Extension = ".txt" Then
                    Dim ioFile As New StreamReader(defaultNetworkDrive & file.Name)

                    Dim ioLine As String ' Going to hold one line at a time
                    Dim ioLines As String ' Going to hold whole file
                    ioLine = ioFile.ReadLine
                    ioLines = ioLine

                    While Not ioLine = ""
                        ioLine = ioFile.ReadLine
                        ioLines = ioLines & vbCrLf & ioLine
                    End While

                    MsgBox(ioLines) 'SHOWS all the lines in the TXT file

                    If InStr(1, ioLines, encryptedText, vbTextCompare) <> 0 Then
                        MsgBox("True")
                    Else
                        MsgBox("False")
                    End If

                    'Dim sw As StreamWriter = file.CreateText("input.txt")
                    'sw.Write(ioLines)
                    'sw.Close()

                    ioFile.Close()
                End If
            Next

Я нахожу его и ИСТИНА , но я не уверен, как можно просто удалить эту строку , а затем сохранить ее !

Любая помощь будет отличной! : О)

David

Ответы [ 4 ]

5 голосов
/ 23 марта 2011

Вы должны переписать файл. Используйте StreamWriter для создания временного файла. Читайте по одной строке за раз и записывайте ее в выходной файл. Пропустите запись, если вы не хотите строки. Очистите, переименовав оригинал, переименовав временный и удалив переименованный оригинал.

Используйте что-то лучше, чем текстовый файл, например dbase, если это слишком медленно.

3 голосов
/ 23 марта 2011

Вам нужно проверить строку для исключения внутри цикла, где вы читаете строки:

While Not ioLine = ""
  ioLine = ioFile.ReadLine
  If ioLine <> "318erg4nergpERGhmboergn4t34tmg054" then
    ioLines = ioLines & vbCrLf & ioLine
  End
End While
1 голос
/ 23 марта 2011
If ioLines.StartsWith(encryptedText) Then
    MsgBox("True")
Else
    MsgBox("False")
End If

Вы проверяете, начинается ли 'file' (ioLines) с зашифрованного текста, а не со строки (ioLine). Я подозреваю, что именно поэтому он не находит его. Я не уверен, что вы намереваетесь, но я думаю, что добавление vbCrLf к ioLines приведет к пустой строке между каждой строкой. Таким образом, ваш выходной файл будет

LINE
[empty line]
LINE
[empty line]
...

Чтобы сохранить файл без этой строки, вам нужно написать строки, которые вы хотите сохранить, в новый файл.

Read line from file
If not excluded line
    write line

Нечто подобное (очевидно, с макушки головы):)

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

Хм, возможно я нашел ответ.

Вы соединяете все линии вместе:

ioLines = ioLines & vbCrLf & ioLine

Позже вы пытаетесь найти строку поиска, но только в начале объединенной строки!

ioLines.StartsWith(encryptedText)

encryptedText будет найден только в том случае, если он появится в самой первой строке файла. В вашем примере соответствующая строка находится где-то посередине строки iolines . Поэтому вы должны попытаться использовать ioLines.Contains (encryptedText) вместо этого.

Edit:

Вы можете попытаться сделать следующее (хотя я этого не проверял)

Dim fileLines as List(Of String)
fileLines = new List(Of String)(File.ReadAllLines(yourFileNameHere))

For i as Integer = fileLines.Count To 0 Step -1
  If fileLines(i).Contains(encryptedText) Then
    fileLines(i).RemoveAt(i)
  End If
Next
File.WriteAllLines(yourFileNameHere, fileLines.ToArray)

НТН

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