VBScript вставка строки в алфавитном порядке - PullRequest
1 голос
/ 01 октября 2010

Я пытаюсь вставить строку, которая начинается со слова заголовка, как в title: New string to be inserted в файл, который имеет следующий формат. Куча текста вверху, блок строк, каждая из которых начинается со слова title:, и куча текста внизу.

Some content here at the top 
And more content 
and the titles will begin next

title: Basic String
title: How does it evaluate strings
title: Identify code links
title: Translating vbscript to string

some content at the bottom
and more content at the bottom

Дело в том, что я бы предпочел вставить эту новую строку title: New string to be inserted, чтобы она была организована в алфавитном порядке в блоке заголовков, чтобы упростить ведение этого файла. Как я могу сделать это с VBScript. Я обнаружил это несколько часов назад и думаю, что это отличная альтернатива тому, что я пытаюсь сделать, но пока не настолько хорош, поэтому любая помощь будет великолепна

Как бы я прошел через все строки файл, скопируйте каждую строку в новый файл, пока я не нажму название в алфавитном порядке после моего названия, добавить мой название нового файла в этом месте, затем скопируйте оставшуюся часть файла в Новый файл и закройте.

Поскольку я плохо разбираюсь в синтаксисе vbscript, я могу думать только о псевдоалгоритме,

Loop to read through all lines
  If the line does not start with the word title:, copy it as is into the new file
  If the line starts with the word title, remove the `title:` sub-string, then check if it is alphabetically before or after my title
      If before my title, copy it into the new file
      If after my title, then copy my title there, and copy all rest of the file as is, and EXIT
End loop

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Нет простого способа сортировки в vbscript. Вы должны сделать свою собственную подпрограмму сортировки. Вот небольшой обман с использованием сортировки Windows cmd.

strToInsert= WScript.Arguments(0)
strFileName = WScript.Arguments(1)
Set objFS = CreateObject( "Scripting.FileSystemObject" )
If objFS.FileExists("temp") Then
  objFS.DeleteFile("temp")
End If 
Set objRE = New RegExp
objRE.IgnoreCase = False
objRE.Pattern = "^title.*"
Set objFile = objFS.OpenTextFile(strFileName)
Set objOutFile = objFS.OpenTextFile("temp",2 , True )
Dim A()
d=0
Do Until objFile.AtEndOfStream    
    linenum=objFile.Line
    strLine = objFile.ReadLine
    Set Matches = objRE.Execute(strLine)
    For Each Match in Matches   ' Iterate Matches collection.             
        objOutFile.Write(Match.Value & vbCrLf)
        ReDim Preserve A(d)
        A(d)=linenum ' get position of title lines
        d=d+1
    Next    
Loop       
objOutFile.Write(strToInsert & vbCrLf)
objFile.Close
objOutFile.Close

Set WshShell = CreateObject("WScript.Shell")
Set objFile = objFS.OpenTextFile(strFileName)
Do Until objFile.AtEndOfStream  
    linenum=objFile.Line  
    strLine = objFile.ReadLine
    c=0 
    If linenum =  A(0) Then
        Set oExec = WshShell.Exec("sort temp ")
        Do While Not oExec.StdOut.AtEndOfStream
              sLine = oExec.StdOut.ReadLine
              WScript.Echo sLine
              c=c+1
        Loop
        oExec.Terminate 
    End If 
    If linenum <A(0) Or linenum > A(UBound(A)) Then
        WScript.Echo strLine
    End If 
Loop  

выход

C:\test>cscript //nologo  myscript.vbs "title: to insert new string" file
Some content here at the top
And more content
and the titles will begin next

title: Basic String
title: How does it evaluate strings
title: Identify code links
title: to insert new string
title: Translating vbscript to string

some content at the bottom
and more content at the bottom

Если вы хотите выполнить сортировку с помощью vbscript, вы можете выполнить поиск в стеке потока для «массивов сортировки vbscript», и есть предложения, как это сделать.

1 голос
/ 01 октября 2010

РЕДАКТИРОВАТЬ: изменил код на VB.

Очень просто. Вы можете достичь этого путем объединения строки в VB.

Перед добавлением stringToBeInserted просто сделайте это перед раздачей

Dim stringToBeInserted As String = "WHATEVER THE NAME OF THE TITLE"
Dim appendTitle As String = "Title: "
Dim newStringToBeInserted As String = appendTitle & stringToBeInserted

Надеюсь, это поможет. Дайте мне знать, если это так.

PK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...