当遇到特定字符串时将文本文件拆分为多个文件

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