Vbscript 跳过第行中的一些文本

Vbscript 跳过第行中的一些文本,vbscript,vba,Vbscript,Vba,我需要从行中删除一些文本: 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

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

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 名称=测试 科雷奥=test@test.tst 我想删除“name=”和“correo=”。

我将使用
=
作为分隔符,然后检查第一个元素是name还是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)
我使用
=
作为分隔符来分隔每行,然后检查第一个元素是name还是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)
使用-最初的想法是让代码对人来说可以理解-代码有以下3个任务:

  • 从文件中读取并将输入保存为字符串
  • 操作字符串(例如,替换
    name=
    correo=
  • 将被操纵的字符串写入新文件
所有这些操作在
TestMe()
中都很明显:


一旦上述骨骼准备就绪,两个函数
ReadFromFile
WriteToFile
就非常方便了:

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
使用-最初的想法是让代码对人来说可以理解-代码有以下3个任务:

  • 从文件中读取并将输入保存为字符串
  • 操作字符串(例如,替换
    name=
    correo=
  • 将被操纵的字符串写入新文件
所有这些操作在
TestMe()
中都很明显:


一旦上述骨骼准备就绪,两个函数
ReadFromFile
WriteToFile
就非常方便了:

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的强大功能来实现类似的结果,而无需一次读取一行

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

输出


@Cid展示了如何使用拆分/联接的功能来实现您想要的。我将演示如何利用RegEx的功能来实现类似的结果,而无需每次阅读一行

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

输出


这行不通,您只需删除
name=
correo=
事件,而不是跳过以those开头的行。
MsgBox Replace(“name=toto”,“name=,”)
将显示“toto”,不是空字符串。@Cid-I认为这是OP实际要求的-离开
test
test@test.tst
从输入中。他逐字写下“我需要从行中删除一些文本:”。这意味着这不清楚他在问什么。对于Pankaj和我来说,我们理解了一整行的跳行,而不是删除
name/correo=
@Cid-yup。不过,能够做这两个选项中的任何一个会让你很容易地适应另一个。谢谢@vityta!你的代码非常有用!!上帝保佑你!为我的模棱两可感到抱歉问题是,在我的母语中,我们是参照上下文说话的。这不起作用,你只是删除
name=
correo=
发生的事件,而不是跳过以those开头的行。
MsgBox Replace(“name=toto”,“name=,”)
将显示“toto”,不是空字符串。@Cid-I认为这是OP实际要求的-离开
test
test@test.tst
从输入中。他逐字写下“我需要从行中删除一些文本:”。这意味着这不清楚他在问什么。对于Pankaj和我来说,我们理解了一整行的跳行,而不是删除
name/correo=
@Cid-yup。不过,能够做这两个选项中的任何一个会让你很容易地适应另一个。谢谢@vityta!你的代码非常有用!!上帝保佑你!为我的模棱两可感到抱歉我的问题是,在我的母语中,我们是根据上下文说话的。请您解释一下您的期望是什么?我想跳过“name=”和“correo=”是指跳过以“name=”和“correo=”开头的行,还是简单地删除“name=”和“correo=”,离开考场test@test.tst到位?可能重复为什么你们中有人回答了一个明显重复的问题?这是第一次有人问如何在阅读中跳过一行吗?别忘了它被标记了两种不同的技术,这使得它“不清楚”至少是这样。所有这些只是用更多的重复和错误信息填充网站(VBScript不是,我重复一遍不是VBA)让人们更难找到规范的问题和相关答案。可能是@Makyen的重复。你知道他们已经接受了。请解释一下你的期望。我想跳过“name=”和“correo=”,你是指跳过以“name=”和“correo=”开头的行,还是简单地删除“name=”和“correo=”,离开测试和test@test.tst到位?可能重复为什么你们中有人回答了一个明显重复的问题?这是第一次有人问如何在阅读中跳过一行吗?别忘了它被标记了两种不同的技术,这使得它“不清楚”至少如此。所有这些都会让网站充斥着更多的重复和错误信息(VBScript不是,我重复不是VBA),让人们更难找到规范的问题和相关的答案。可能是@Makyen的重复。你知道他们已经接受了。