当遇到特定字符串时将文本文件拆分为多个文件
Split text file Into multiple files when it hits a certain string
我对编程还很陌生,我在工作中接到了这个任务。每次遇到字符串字符 {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
-}
新文本2
{1:F01BO}{2:I940{4:dfdfd
:20:06AUG2
:25:6412
:64:C200806EUR1748473,62
-}
新文本 3:
{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
我正在阅读正则表达式,我应该改用它吗?任何帮助都会非常感谢。
- VB脚本中的数组是从 0 开始的。最好从 0 开始循环。
- 在结束分隔符
-}
处拆分比较聪明,所以拆分结果的第一个元素不为空
- 我正在使用
With
块来组织代码。 “一行完成”变得难以快速阅读。
- 我正在使用
Option Explicit
,因此必须正确声明所有变量。这可以防止 hard-to-debug 变量名称中的拼写错误问题,将 Option Explicit
与所有 VB 代码一起使用是一个很好的习惯。
- 创建具有发音名称(例如
ForWriting
)的常量比使用不透明的“幻数”(例如 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
我对编程还很陌生,我在工作中接到了这个任务。每次遇到字符串字符 {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 -}
新文本2
{1:F01BO}{2:I940{4:dfdfd :20:06AUG2 :25:6412 :64:C200806EUR1748473,62 -}
新文本 3:
{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
我正在阅读正则表达式,我应该改用它吗?任何帮助都会非常感谢。
- VB脚本中的数组是从 0 开始的。最好从 0 开始循环。
- 在结束分隔符
-}
处拆分比较聪明,所以拆分结果的第一个元素不为空 - 我正在使用
With
块来组织代码。 “一行完成”变得难以快速阅读。 - 我正在使用
Option Explicit
,因此必须正确声明所有变量。这可以防止 hard-to-debug 变量名称中的拼写错误问题,将Option Explicit
与所有 VB 代码一起使用是一个很好的习惯。 - 创建具有发音名称(例如
ForWriting
)的常量比使用不透明的“幻数”(例如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