从行中跳过一些文本

Skip some text from line

我需要从行中删除一些文本:

strdir = "C:\texto.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.OpenTextFile(strdir)
Dim arrTxt()
k = 0
Do Until objFile.AtEndOfStream
    z = (k+1)
    ReDim Preserve arrTxt(z)
    line = objFile.ReadLine
    arrTxt(k) = line
    k = z
Loop
print Join(arrTxt, ",") 
print (UBound(arrTxt) + 1)

我的文本文件 texto.txt:

name=test
correo=test@test.tst

我想删除 "name=" 和 "correo="。

split 每行使用 = 作为分隔符,然后我会检查第一个元素是名称还是 correo。

strdir = "C:\texto.txt"
Set fso = createobject("Scripting.filesystemobject")
Set objFile = fso.OpenTextFile(strdir)
Dim arrTxt()
k = 0
Do until objFile.AtEndOfStream
    z = (k+1)
    ReDim preserve arrTxt(z)
    line = objFile.ReadLine
    myArray = Split(line, "=")
    If (Not ((UBound(myArray) > 0) AND (myArray(0) = "name" OR myArray(0) = "correo"))) Then
        arrTxt(k) = line
        k = z
    End If
loop
print Join(arrTxt,",") 
print (Ubound(arrTxt) + 1)

With - 最初的想法是让代码易于人类理解 - 代码有以下 3 个任务:

  • 从文件读取并将输入保存为字符串;
  • 处理字符串(例如替换 name=correo=
  • 将操作后的字符串写入新文件;

所有这些操作在 TestMe():

中都很明显
Sub TestMe()

    Dim readTxt As String
    Dim filePath As String: filePath = "C:\text.txt"

    readTxt = ReadFromFile(filePath)
    readTxt = Replace(readTxt, "name=", "")
    readTxt = Replace(readTxt, "correo=", "")

    WriteToFile filePath, readTxt

End Sub

一旦上面的骨骼准备就绪,ReadFromFileWriteToFile 这两个函数就非常方便了:

Public Function ReadFromFile(path As String) As String

    Dim fileNo As Long
    fileNo = FreeFile

    Open path For Input As #fileNo

    Do While Not EOF(fileNo)
        Dim textRowInput As String
        Line Input #fileNo, textRowInput
        ReadFromFile = ReadFromFile & textRowInput
        If Not EOF(fileNo) Then
            ReadFromFile = ReadFromFile & vbCrLf
        End If
    Loop

    Close #fileNo

End Function

Sub WriteToFile(filePath As String, text As String)

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim oFile As Object
    Set oFile = fso.CreateTextFile(filePath)
    oFile.Write text
    oFile.Close

End Sub

@Cid 展示了如何使用 Split/Join 的力量来实现你想要的。我将演示如何利用 RegEx 的强大功能来获得类似的结果,而无需一次阅读一行。

假设您的文本文件如下所示

strdir = "C:\texto.txt"
Set objFSO = CreateObject("Scripting.filesystemobject")
Set objFile = objFSO.OpenTextFile(strdir)
strContent = objFile.ReadAll
objFile.Close

msgbox RemoveLines(strContent)


Function RemoveLines(str)
  Dim objRegEx
  Set objRegEx = New RegExp
  With objRegEx
      .Global = True
      .Pattern = "^name=.*\n|^correo=.*\n"
      .Multiline = True     
  End With
  RemoveLines = objRegEx.Replace(str, "")
End Function

输出