Regex 当文本文件碰到某个字符串时,将其拆分为多个文件
我对编程相当陌生,我在工作中就接到了这个任务。每次文本文件碰到字符串Regex 当文本文件碰到某个字符串时,将其拆分为多个文件,regex,vbscript,Regex,Vbscript,我对编程相当陌生,我在工作中就接到了这个任务。每次文本文件碰到字符串{1:并以-}结尾时,我都需要拆分该文本文件,然后创建一个新的文本文件。见下例: 原始文本文件: {1:F01BOF}{2:I940B}{4:dfdfd :20:06AUG :25:64 -}{1:F01BO}{2:I940{4:dfdfd :20:06AUG2 :25:6412 :64:C200806EUR1748473,62 -}{1:F01}{2:I940XN}{4:fvfddf :20:06AUG81-} 我在读正则表达
{1:
并以-}
结尾时,我都需要拆分该文本文件,然后创建一个新的文本文件。见下例:
原始文本文件:
{1:F01BOF}{2:I940B}{4:dfdfd
:20:06AUG
:25:64
-}{1:F01BO}{2:I940{4:dfdfd
:20:06AUG2
:25:6412
:64:C200806EUR1748473,62
-}{1:F01}{2:I940XN}{4:fvfddf
:20:06AUG81-}
我在读正则表达式,我应该用它来代替吗?任何帮助都将非常感谢。- VBScript中的数组是基于0的。最好从0开始循环
- 在分隔符
的末尾拆分更为明智,因此拆分结果的第一个元素不是空的-}
- 我使用
和
块来组织代码。“一行完成所有工作”很难快速阅读
- 我使用的是显式
,因此必须正确声明所有变量。这可以防止由于变量名中的输入错误而导致难以调试的问题,在所有VB代码中使用选项
,这是一个非常好的习惯Option Explicit
- 用一个会说话的名字创建常量(比如
)比使用不透明的“幻数”(比如来编写
)要好得多2
- 请注意,您正在以Unicode格式写入文件,但没有以Unicode格式读取。这可能是故意的,也可能不是故意的,这是你的决定
- 在这里,对文件句柄调用
并非绝对必要,但这是一种很好的方式.Close
Option Explicit
Dim FSO, text, parts, i
Const ForReading = 1
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile("C:\JustNeeded.txt", ForReading)
text = .ReadAll
.Close
End with
parts = Split(text, "-}")
For i = 0 To UBound(parts) - 1
If Len(parts(i)) > 0 Then
With FSO.OpenTextFile("new" & (i + 1) & ".txt", ForWriting, True)
.Write parts(i) & "-}"
.Close
End With
End If
Next
这看起来像是某种JSON。那个文本文件的格式是什么?我肯定有parsersHi Cid,是的,它可能是发送给公司的方式,但当我得到它时,它以上面的格式保存在一个.txt文件中。当你在记事本中打开输入文本文件,然后单击“另存为…”-记事本显示什么编码?嗨,Tomalak,当我将其放入记事本+,并另存为显示“所有类型(.)”否,我不是要那种类型的。我要的是文件编码。嗨,托玛拉克,谢谢你的帮助。好的,我尝试了上面的代码,它似乎运行没有错误,但没有出现新文件。我正在使用.bat文件运行代码,这样可以吗?@jemac如何启动代码并不重要,bat文件和其他方法一样好。如果代码运行时没有错误,那就到此为止了。我确信它会写输出文件(它会写,我已经测试过了),只是不会在输入文件旁边写。搜索文件。嘿,托玛拉克,让它工作起来,把文件名弄乱了。感谢以上所有的帮助和提示。 {1:F01BO}{2:I940{4:dfdfd :20:06AUG2 :25:6412 :64:C200806EUR1748473,62 -} {1:F01}{2:I940XN}{4:fvfddf :20:06AUG81-}
Set fso = CreateObject("Scripting.FileSystemObject")
data = split(fso.OpenTextFile("C:\JustNeeded.txt").ReadAll, "{1")
For i = 1 To UBound(data)
fso.OpenTextFile("new" & i & ".txt", 2, True).Write "{1" & data(i)
Next
Option Explicit
Dim FSO, text, parts, i
Const ForReading = 1
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile("C:\JustNeeded.txt", ForReading)
text = .ReadAll
.Close
End with
parts = Split(text, "-}")
For i = 0 To UBound(parts) - 1
If Len(parts(i)) > 0 Then
With FSO.OpenTextFile("new" & (i + 1) & ".txt", ForWriting, True)
.Write parts(i) & "-}"
.Close
End With
End If
Next