Удалить строку из текстового файла, если эта строка содержит некоторую строку - PullRequest
3 голосов
/ 22 октября 2011

В VB6 я ищу способ удалить строку текста из текстового файла, если эта строка содержит некоторую строку. Я работаю в основном с C #, и я в растерянности здесь. В .NET есть несколько способов сделать это, но я счастливчик, который должен поддерживать некоторый старый код VB.

Есть ли способ сделать это?

Спасибо

Ответы [ 3 ]

5 голосов
/ 22 октября 2011

Если у вас есть имя файла в переменной sFileName:

Dim iFile as Integer
Dim sLine as String, sNewText as string

iFile = FreeFile

Open sFileName For Input As #iFile
Do While Not EOF(iFile)
  Line Input #iFile, sLine
  If sLine Like "*foo*" Then
    ' skip the line
  Else
    sNewText = sNewText & sLine & vbCrLf
  End If
Loop
Close

iFile = FreeFile
Open sFileName For Output As #iFile
Print #iFile, sNewText
Close

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

4 голосов
/ 22 октября 2011

Ну, текстовые файлы с некоторой точки зрения являются сложным зверем: вы не можете удалить строку и переместить следующий текст назад, это поток.

Вместо этого я предлагаю вам рассмотреть вопрос о подходе ввода к выводу.:

1) вы открываете входной файл как текст

2) вы открываете второй файл для вывода, временный файл.

3) вы перебираете все строки вфайл A.

4) если текущая строка содержит нашу строку, не пишите ее.Если текущая строка не содержит нашу строку, мы записываем ее в файл B.

5) вы закрываете файл A, закрываете файл B.

Теперь вы можете добавить несколько шагов.

6) Удалить файл A

7) Переместить файл B в предыдущее местоположение файла A.

0 голосов
/ 30 ноября 2015
DeleteLine "C:\file.txt", "John Doe", 0,  
Function DeleteLine(strFile, strKey, LineNumber, CheckCase)

 'Use strFile = "c:\file.txt"   (Full path to text file)
 'Use strKey = "John Doe"       (Lines containing this text string to be deleted)

    Const ForReading = 1
    Const ForWriting = 2

    Dim objFSO, objFile, Count, strLine, strLineCase, strNewFile

    Set objFSO = CreateObject("Scripting.FileSystemObject")    
    Set objFile = objFSO.OpenTextFile(strFile, ForReading)

    Do Until objFile.AtEndOfStream
       strLine = objFile.Readline

       If CheckCase = 0 Then strLineCase = UCase(strLine): strKey = UCase(strKey)
       If LineNumber = objFile.Line - 1 Or LineNumber = 0 Then
          If InStr(strLine, strKey) Or InStr(strLineCase, strKey) Or strKey = "" Then
             strNewFile = strNewFile
          Else
             strNewFile = strNewFile & strLine & vbCrLf
          End If
       Else
          strNewFile = strNewFile & strLine & vbCrLf
       End If

    Loop
    objFile.Close

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strFile, ForWriting)

    objFile.Write strNewFile 
    objFile.Close
 End Function
...