Re: Parsing a txt file into Word

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Cato Larsen wrote:
I've never parsed text in Word before, so the whole approach is new to me,
and google was for once not that helpfull in my search for parsing txt files
in word.

Last thing first. You're parsing text files in VB(A), not Word! That's the first
mindset that needs to change. This isn't a job for Word.

The formatting of the text file is as follows:

How big are these files? Presumably, very small, right? A few hundred K, at most?

I would advise reading the entire file into an array of "lines" and parsing them one
by one. That's pretty easy to do, sorta like this:

Dim TheLines() As String
TheLines = Split$(ReadFile(MyFile$), vbCrLf)

Public Function ReadFile(ByVal FileName As String) As String
Dim hFile As Long
On Error GoTo Hell
hFile = FreeFile
Open FileName For Binary As #hFile
ReadFile = Space$(LOF(hFile))
Get #hFile, , ReadFile
Close #hFile
Hell:
End Function

Then, you start looping through the file, line by line.

At the top there are about 4-5 lines of junk. This can be discarded.

Is there a "comment" like marker for these? Something to identify them as junk? If
not, you'll need to decide whether it's 4 or 5. That matters. At any rate, in your
loop through TheLines(), you simply skip processing these. (I'd probably advise
also adding a test here to be sure the line isn't empty, and skip those too?)

I would suggest you create a series of flags that keep track of what section you're
in, if the sections always follow the same pattern. For instance:

Const secJunk = 0
Const secNames = 1
Const secInterfaces = 2
'etc
Private m_Section As Long

Next up are some 30 lines (has to be counted dynamicly) with the following
formatting:

name ipAddress hostAdress
Example of the line formatted:
name 169.154.0.1 server.myWorld.com

name is static to all these lines.

Dim ThisLine As Variant

If m_Section <= secNames Then
If InStr(1, TheLines(i), "name", vbTextCompare) = 1 Then
' Set section flag to Names section!
m_Section = secNames
' Parse this line.
ThisLine = Split(Trim$(TheLines(i)), " ")
ipAddress = ThisLine(1)
hostAddress = ThisLine(2)
' Do something with this data?
End If
End IF

Next up is interfaces, and they are separated by an exclamation mark before
each "box" of text.
Formatting:
interface interfaceName
nameif nameOfService
security-level lvl
ip address ipAddress hostMask

Example:
interface vlan123
nameif Inside
security-level 100
ip address 169.154.0.1 255.255.255.0

interface, nameif, security-level & ip address are static to this bulk of
text.

Same pattern as last section.

If m_Section <= secInterfaces Then
If InStr(1, TheLines(i), "interface", vbTextCompare) = 1 Then
' Set section flag to Names section!
m_Section = secInterfaces
' Parse this line.
ThisLine = Split(Trim$(TheLines(i)), " ")
interfaceName = ThisLine(1)
' Parse next line.
ThisLine = Split(Trim$(TheLines(i + 1)), " ")
nameif = ThisLine(1)
' Parse next line.
ThisLine = Split(Trim$(TheLines(i + 2)), " ")
security-level = ThisLine(1)
' Parse next line.
ThisLine = Split(Trim$(TheLines(i + 3)), " ")
ipAddress = ThisLine(2)
hostMask = ThisLine(3)
' Do something with this data?
End If
End IF

You'll have to insure your naming scheme is logically consistent with the above
assumptions, of course.

Next are some object groups
Formatting;
object-group type GR-name
network-object ipAddress HostMask

Example:
object-group network GR-internet
network-object 169.154.0.0 255.255.255.0
network-object 169.155.0.0 255.255.0.0
port-object eq 123
group-object GR-here-internett
icmp-object echo-reply

One object-group can contain an unknown amount of objects and other types of
service descriptors.

Same pattern as before. <g>

My biggest issue is how to get this info into tables with a formatting &
having it dynamicly update if the data.txt file is changed.

Now(!), you're talking about using Word. Up until now, it's all been VB(A). I
don't know diddly about Word, so perhaps someone else can lend a hand here.

Have fun...
--
..NET: It's About Trust!
http://vfred.mvps.org


.



Relevant Pages

  • Re: parsing a tree like structure
    ... I'm wondering if there is a nice way to parse this data, ... push @ret, ... SCSI Interface: ... Scsi Stats: ...
    (perl.beginners)
  • Summary: Changing ipaddress under Solaris 10
    ... later changed my mind regarding the second ipaddress and net. ... but after a reboot netstat -rn shows only one interface. ...
    (SunManagers)
  • Re: Looking for some one
    ... The problem is that the web interface is very slow and inefficient. ... For a web forum you'd need to grab the top page, parse the relevant links to ... the relevant page so your response could be formatted so the server would ...
    (uk.singles)
  • Re: [ksh] How to get IpAddress?
    ... >How do I get the IpAddress of the machine that I have log on? ... at least 2 - the loopback interface 127.0.0.1 being the address ... >When I use ifconfig, it just showing too much info, and more ... I don't know how standardized the output format is but ...
    (comp.unix.shell)
  • Re: howto find system/interface ipaddress?
    ... "Eugene Gershnik" wrote: ... >> possible to find the ipaddress configure for each interface? ... >> Applications). ...
    (microsoft.public.win32.programmer.networks)