2016-05-12 1 views
-2

Я пытаюсь создать файл VBscript, который будет разделять текстовый файл на несколько текстовых файлов. Я не программировал какое-то время, и я несколько раз бил головой об этом.VB Script для разделения текста на несколько файлов

Это часть текстового файла.

Tested on,8 May 2016,,,, 
Asset ID,126567,,,, 
Rigel 288,Z48-0366,,,, 
Site,Workshop,,,, 
Location,WORKSHOP,,,, 
AP Setup,,0,,, 
User Name,Workshop,,,, 
Test Sequence,TestCode-BGC2,,,, 
Live Voltage,,, 248,,,V 
Neutral Voltage,,, 2,,,V 
Load Current,,, 0.0,,,A 
Load Test,,, 0.0,,,kVA 
Enclosure Lkg,Mains Normal,, 8,Pass,100,µA 
Enclosure Lkg,Mains Normal,SFC: Neutral Open, 12,Pass,500,µA 
Enclosure Lkg,Mains Reversed,, 8,Pass,100,µA 
Enclosure Lkg,Mains Reversed,SFC: Neutral Open, 12,Pass,500,µA 
User Comment,,,, 
Status,Pass 

Tested on,8 May 2016,,,, 
Asset ID,126563,,,, 
Rigel 288,Z48-0366,,,, 
Site,Workshop,,,, 
Location,WORKSHOP,,,, 
AP Setup,,0,,, 
User Name,Workshop,,,, 
Test Sequence,TestCode-BGC2,,,, 
Live Voltage,,, 247,,,V 
Neutral Voltage,,, 2,,,V 
Load Current,,, 0.0,,,A 
Load Test,,, 0.0,,,kVA 
Enclosure Lkg,Mains Normal,, 8,Pass,100,µA 
Enclosure Lkg,Mains Normal,SFC: Neutral Open, 12,Pass,500,µA 
Enclosure Lkg,Mains Reversed,, 8,Pass,100,µA 
Enclosure Lkg,Mains Reversed,SFC: Neutral Open, 13,Pass,500,µA 
User Comment,,,, 
Status,Pass 

Tested on,8 May 2016,,,, 
Asset ID,126555,,,, 
Rigel 288,Z48-0366,,,, 
Site,Workshop,,,, 
Location,WORKSHOP,,,, 
AP Setup,,0,,, 
User Name,Workshop,,,, 
Test Sequence,TestCode-BGC2,,,, 
Live Voltage,,, 245,,,V 
Neutral Voltage,,, 2,,,V 
Load Current,,, 0.0,,,A 
Load Test,,, 0.0,,,kVA 
Enclosure Lkg,Mains Normal,, 8,Pass,100,µA 
Enclosure Lkg,Mains Normal,SFC: Neutral Open, 12,Pass,500,µA 
Enclosure Lkg,Mains Reversed,, 8,Pass,100,µA 
Enclosure Lkg,Mains Reversed,SFC: Neutral Open, 12,Pass,500,µA 
User Comment,,,, 
Status,Pass 

Мне нужно, чтобы иметь возможность отделить каждый бит от начала строки «Проверено» и конца строки «Status, Pass» на отдельные текстовые файлы, которые должны быть названы в честь конкретного актива ID, например, " 126567.txt " Если это может повториться до конца файла, так как будет больше 3, обычно около 40.

Любая помощь будет действительно оценена.

+0

Вы можете разместить код, который вы * «стучал мою голову в течение нескольких дней» *? Пока что помимо файловой структуры вы ничего нам не показали. – Lankymart

+1

Что вы сделали с головой? С какими проблемами вы столкнулись? Является ли исходный файл достаточно малым, чтобы его можно было прочитать в одну строку? Это похоже на работу для регулярных выражений - посмотрели, как они работают с VBScript? –

ответ

1

Дайте ниже попробовать. Я написал его в 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 

Я скопировал текст вашего сообщения на мой тест и оказалось, что работа для меня ...

 Смежные вопросы

  • Нет связанных вопросов^_^