Solved

Sort contents of text file with headers alphabetically using vbs

Posted on 2008-10-27
2
437 Views
Last Modified: 2010-04-21
Hi all,

I need to sort, using vb script, the contents of a text file that looks like this:

[WEBN]
Wam Es= 1
AIG Esk=1
Aviv RJF=1
[TABB]
Sch Ins=1
CMH Cap=1
AIG Esk=1
Stikem Ell=1

to have the information under the users name alphabetical like this:

[WEBN]
AIG Esk=1
Aviv RJF=1
Wam Es= 1
[TABB]
AIG Esk=1
CMH Cap=1
Sch Ins=1
Stikem Ell=1

As you can see, the only items to be sorted are those between the closing ] of a users name to the opening [ of another users name, etc.  Please note that I do not need the users sorted at all, just the data below their section.  In my example, [WEBN] can continue to come before [TABB].

I need this in vb script.  Any help would be appreciated.  Thanks.
0
Comment
Question by:smsstech
2 Comments
 
LVL 38

Accepted Solution

by:
Shift-3 earned 500 total points
Comment Utility
Paste the script below into a text file with a .vbs extension.  Customize the value of the strFile variable with the location of the .ini file.  Running the script will sort the lines under each heading.

This script requires the .NET Framework to be installed.


Const ForReading = 1

Const ForWriting = 2

Const TriStateUseDefault = -2
 

strFile = "sample.ini"
 

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile(strFile, ForReading, False, TriStateUseDefault)
 

strText = objFile.ReadAll

arrText = Split(strText, vbCrLf)

objFile.Close
 

Set objFile = objFSO.OpenTextFile(strFile, ForWriting, True)
 

For Each strINILine in arrText

    If Left(strINILine, 1) = "[" Then

        If IsArray(arrSection) Then

            For Each strLine in fSortArray(arrSection)

                objFile.WriteLine strLine

            Next		

			

            Set arrSection = nothing

        End If

        objFile.WriteLine strINILine

    ElseIf Not IsArray(arrSection) Then

        ReDim arrSection(0)

        arrSection(0) = strINILine

    Else

        i = UBound(arrSection) + 1

        ReDim Preserve arrSection(i)

        arrSection(i) = strINILine

    End If

Next
 

If IsArray(arrSection) Then

    For Each strLine in fSortArray(arrSection)

        objFile.WriteLine strLine

    Next

End If
 

objFile.Close
 

Function fSortArray(arrSortThisArray)

    Set objArrayList = CreateObject("System.Collections.ArrayList" )

    For i = 0 To UBound(arrSortThisArray)

        objArrayList.Add arrSortThisArray(i)

    Next

    objArrayList.Sort

    set fSortArray = objArrayList

End Function

Open in new window

0
 

Author Closing Comment

by:smsstech
Comment Utility
Shift-3, thank you very much.  That worked like a charm.  I was originally getting a ubound error with my array and was starting to second guess myself, hence the support call as my issue was becoming urgent.  Perfect coding my man.  Cheers.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Recently I have been answering a lot of questions like this in IT forums that I frequent. The question posed is usually something along the lines of "We have software X installed and need to uninstall it for reason Y" or some other variant of the sa…
When it comes to writing scripts for a Client/Server computing environment it is essential to consider some way of enabling the authentication functionality within a script. This sort of consideration mainly comes into the picture when we are dealin…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now