Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 当文本文件碰到某个字符串时,将其拆分为多个文件_Regex_Vbscript - Fatal编程技术网

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