Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Splitting a master report file into individual reports

Posted on 2012-03-21
6
180 Views
Last Modified: 2012-03-22
Greetings experts,

I am looking for an efficient way to input a master file and parse the contents into individual reports based on dynamic headings.  A master file could include anywhere from 1 to 20 individual reports, and in any combination.  Each line of text within the master file is prefixed with an identifier code, '0' representing report titles, and '1' representing report detail.

The master report is layed out as such:
0Report 1
1Report 1 detail line
1Report 1 detail line
1Report 1 detail line
0Report 2
1Report 2 detail line
1Report 2 detail line
0Report 3
1Report 3 detail line
..ect


I would like to write a parse function that transforms the 1 master file into individual files.  The report titles are dynamic to the master file.  Below is some sample psuedocode outlining my desired approach:

Private Sub SplitReport(byVal reportname as String)

   dim srInput as new StreamReader(reportname)
   dim chrPrefix as Char = ""
   dim strReportLine as String = ""
   dim strReportName as String = ""
   dim tempRead as string = ""

do
    tempInput = srInput.ReadLine
    chrPrefix = tempInput.substring(0,1)       ' first character
    strReportLine = tempInput.substring(1)   ' rest of line

    switch (chrPrefix)
         case "0"
                 ' create new StreamWriter object here using Report
                 strReportName = strReportLine.substring(0,8) & ".txt" ' first 8 characters is report name
                 dim swOutputFile as New StreamWriter("C:\temp\" strReportName)
                 swOutputFile.writeLine(strReportLine)
         Case "1"
                 swOutputFile.writeLine(strReportLine)

    End Select
loop until srInput.EndOfStream

srInput.Close

End Sub


My problem is that 1) I dont know how to close the file at the end of Report1 and the beginning of Report2, and 2) I get errors with variable scope since I defined the StreamWriter within a case.  Any suggestions would be very helpful at this point.

Thank you for your advice and suggestions.
0
Comment
Question by:gwosgood
  • 3
  • 2
6 Comments
 
LVL 44

Accepted Solution

by:
AndyAinscow earned 500 total points
ID: 37752650
1)  To close a streamwriter object you can use the member function Close
2)  Scope errors - declare the StreamWriter object outside of your loop.

pseudo code

StreamWriter sw = null
StreamReader sr = open your file for reading here
string sLine

start loop
read a line from sr into sLine

  case statement  --  check first char
     1 then close the currently open sw (IF IT IS NOT NULL)
        open the sw with the required name, write line to it

      2  Write line to sw
  end case
end loop
close sw (possibly should check it is non null - empty input file)
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 37752791
I think the case above should be for
    0 - close current output file and create new one
    1 - write line to report file

mlmcc
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37752894
ooops - well spotted.  :-)
0
Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

 
LVL 2

Author Comment

by:gwosgood
ID: 37753367
what is the proper syntax for testing if sw is null?

here is my code snipet so far:

  Dim inputRTF As New StreamReader(strFilename)
  Dim sw As StreamWriter
  Dim fileNameOutput As String = "C:\temp\"
  Dim chrPrefix As Char = ""
  Dim strReportLine As String = ""
  Dim inputText As String = ""

        Do
            inputText = inputRTF.ReadLine
            chrPrefix = inputText.Substring(0, 1)
            strReportLine = inputText.Substring(1)

            Select Case (chrPrefix)
                Case "0"
                    fileNameOutput = fileNameOutput & inputText.Substring(1, 8) & ".TXT"
                    If sw.Null = False Then sw.Close()
                    sw = New StreamWriter(fileNameOutput)
                    sw.WriteLine(strReportLine)
                Case "1"
                    sw.WriteLine(strReportLine)
            End Select

        Loop Until inputRTF.EndOfStream

        inputRTF.Close()
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 37753803
I'm not certain for VB but does this work?
if sw = nothing then
0
 
LVL 2

Author Comment

by:gwosgood
ID: 37754215
The correct syntax to check for Null is

        If sw.Equals(StreamWriter.Null) = False Then sw.Close()
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Gridview selected row 9 49
Sql server insert 13 36
Checking a checkbox based on SQL DataReader boolean value in ASP.NET(VB) 2 32
Access Schema 6 23
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

809 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