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的重复。你知道他们已经接受了。