Text VB脚本将文本分割成多个文件

Text VB脚本将文本分割成多个文件,text,vbscript,extract,Text,Vbscript,Extract,我正在尝试创建一个VBscript文件,该文件将一个文本文件拆分为多个文本文件。我已经有一段时间没有做任何编程了,这几天我一直在绞尽脑汁 这是文本文件的一部分 于2016年5月8日测试,,,, 资产识别号,126567,,,, 里格尔288,Z48-0366,,,, 地点、车间、车间、,,,, 地点,车间,,,, AP安装程序,0,0,,, 用户名,车间,,,, 测试序列,测试代码-BGC2,,,, 带电电压,,,248,,,V 中性点电压,,,2,,,V 负载电流,,,0.0,,,A 负载测试

我正在尝试创建一个VBscript文件,该文件将一个文本文件拆分为多个文本文件。我已经有一段时间没有做任何编程了,这几天我一直在绞尽脑汁

这是文本文件的一部分

于2016年5月8日测试,,,,
资产识别号,126567,,,,
里格尔288,Z48-0366,,,,
地点、车间、车间、,,,,
地点,车间,,,,
AP安装程序,0,0,,,
用户名,车间,,,,
测试序列,测试代码-BGC2,,,,
带电电压,,,248,,,V
中性点电压,,,2,,,V
负载电流,,,0.0,,,A
负载测试,,,0.0,,,kVA
外壳Lkg,电源正常,8通,100微安
外壳Lkg,电源正常,SFC:中性开路,12通,500微安
外壳Lkg,电源反向,8通,100微安
外壳Lkg,电源反向,SFC:中性开路,12通,500微安
用户评论,,,,
状态,通过
检测日期:2016年5月8日,,,,
资产ID,126563,,,,
里格尔288,Z48-0366,,,,
地点、车间、车间、,,,,
地点,车间,,,,
AP安装程序,0,0,,,
用户名,车间,,,,
测试序列,测试代码-BGC2,,,,
带电电压,,,247,,,V
中性点电压,,,2,,,V
负载电流,,,0.0,,,A
负载测试,,,0.0,,,kVA
外壳Lkg,电源正常,8通,100微安
外壳Lkg,电源正常,SFC:中性开路,12通,500微安
外壳Lkg,电源反向,8通,100微安
外壳Lkg,电源反向,SFC:中性开路,13通,500微安
用户评论,,,,
状态,通过
检测日期:2016年5月8日,,,,
资产识别号,126555,,,,
里格尔288,Z48-0366,,,,
地点、车间、车间、,,,,
地点,车间,,,,
AP安装程序,0,0,,,
用户名,车间,,,,
测试序列,测试代码-BGC2,,,,
带电电压,,,245,,,V
中性点电压,,,2,,,V
负载电流,,,0.0,,,A
负载测试,,,0.0,,,kVA
外壳Lkg,电源正常,8通,100微安
外壳Lkg,电源正常,SFC:中性开路,12通,500微安
外壳Lkg,电源反向,8通,100微安
外壳Lkg,电源反向,SFC:中性开路,12通,500微安
用户评论,,,,
状态,通过
我需要能够将字符串“Tested”的开头和字符串“Status,Pass”的结尾的每个位分离到单独的文本文件中,这些文件需要以特定的资产ID命名,例如“126567.txt” 如果这样可以重复到文件末尾,因为会有3个以上,通常是40个左右


任何帮助都将不胜感激。

请尝试以下内容。我用VBA写的,所以如果遇到任何问题,请告诉我。我认为使用正则表达式将是解析和提取所需值的最快、最简单的方法。如果你有任何问题,请告诉我

Const ForReading = 1
Dim objFSO, objFile, objRegEx
Dim objRegRes, strMatch, strID, strLine
Dim strFilePath, strOutFolder, strRead

'Path to your Main File
strFilePath = "C:\Path\ToFile\test.txt"

'Declare the File Scripting Object To Open, Create, and Read Text Files
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Check if File Exists
If Not objFSO.FileExists(strFilePath) Then
    MsgBox "Cannot Find The File"
    WScript.Quit
End If

'Create Regular Expression object to parse the file
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.MultiLine = True
'Capture all lines that starts with 'Tested' and ends with 'Status,Pass' _
'with a SubMatch or Capture Group for the Value between 'Asset ID,' and the next ','
objRegEx.Pattern = "^Tested on[\s\S]*?Asset ID\,(\S*?)\,[\s\S]*?Status\,Pass$"

'Save the Folder Path of the Main File to a Seperate Variable
strOutFolder = objFSO.GetParentFolderName(strFilePath) & Chr(92)

'Open and Read the Main File into a Variable
Set objFile = objFSO.OpenTextFile(strFilePath, ForReading, False)
strRead = objFile.ReadAll
objFile.Close
Set objFile = Nothing

'Execute the Regular Expression and Loop through the results
Set objRegRes = objRegEx.Execute(strRead)
For Each strMatch In objRegRes
    strLine = Trim(strMatch)
    strID = Trim(strMatch.SubMatches(0))
    'Create Individual Text Files For Each Match - *Will OverWrite Files If They Exist
    Set objFile = objFSO.CreateTextFile(strOutFolder & strID & ".txt", True)
    objFile.Write strLine    'Change to: 'objFile.WriteLine' if you want an ending Carriage Return
    objFile.Close

    'Optional Cleanup
    Set objFile = Nothing
    strLine = vbNullString
    strID = vbNullString
Next

MsgBox "Completed"
WScript.Quit

我为我的测试复制了你帖子的文本,它似乎对我有用…

你能发布你“几天来一直在敲我脑袋”的代码吗?除了一个文件结构,你什么也没给我们看。你脑袋砰砰的一声做了什么?你遇到了什么问题?源文件是否足够小,可以读入单个字符串?这听起来像是正则表达式的工作——您研究过它们如何使用VBScript吗?