JimDel
JimDel

Reputation: 4359

Remove a line from a text file if that line contains some string

In VB6, I'm looking for a way to remove a line of text from a text file if that line contains some string. I work mostly with C# and I'm at a loss here. With .NET there are several ways to do this, but I'm the lucky one who has to maintain some old VB code.

Is there a way to do this?

Thanks

Upvotes: 3

Views: 3843

Answers (3)

subhajit mondal
subhajit mondal

Reputation: 7

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

Upvotes: -3

C-Pound Guru
C-Pound Guru

Reputation: 16368

Assuming you have the filename in a variable 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

You may want to output to a different file instead of overwriting the source file, but hopefully this gets you closer.

Upvotes: 5

Salvatore Previti
Salvatore Previti

Reputation: 9080

Well text files are a complicated beast from some point of view: you cannot remove a line and move the further text backward, it is a stream.

I suggest you instead about considering an input to output approach:

1) you open the input file as text

2) you open a second file for output, a temporary file.

3) you iterate through all lines in file A.

4) if current line contains our string, don't write it. If current line does not contains our string, we write it in the file B.

5) you close file A, you close file B.

Now you can add some steps.

6) Delete file A

7) Move file B in previous file A location.

Upvotes: 4

Related Questions