Solved

Parse text file, trim each line, remove carriage returns, add CRLF after delimiter character?

Posted on 2007-12-04
6
7,667 Views
Last Modified: 2013-11-07
I believe this is a fairly simple question, but unfortunately I have no experience working with text files so I'm asking for help rather than figuring it out myself.

I need to read in a text file (it's going to be 5 megs up to a couple hundred).

I need to do the following with it
1) I need to remove the trailing spaces from each line.
2) Delete all carriage returns and line feeds.
3) Add a Carriage Return/ Line Feed after any instance of "</END??>" where the ?? can be anything.

I believe each line is around 1000 bytes.  Speed doesn't really matter.
I mention the byte count since I think this is a large file and should use something like a string buffer no? Not really familiar with anything other than ordinary strings.

I'll gladly bump up the point value for a quick quality solution.
0
Comment
Question by:Brothernod
[X]
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
  • 3
  • 2
6 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20409231
let's assume you read each line into a String object:
       Dim line as String

To remove new lines and CRs, use:
       line = line.Replace(chr(10).ToString(), "")
       line = line.Replace(char(13).ToString(), "")

Then remove trailing spaces
       line = line.TrimEnd(null);

about the </END??> issue, you can do it with an algorithm:
      Dim i as Integer = 0
      Do
             i = line.IndexOf("</END", i)
             If i < 0 Then Exit Do
             i = line.IndexOf(">", i)
             If i < 0 Then Exit Do
             line = line.Insert(i+1, char(13) & chr(10))
      While True
0
 
LVL 19

Expert Comment

by:weellio
ID: 20409421
here ya go
Dim source, target
source = "myfile.txt"
target = "myfile2.txt"
 
Dim fso, f, f2
dim x, y
Const ForReading = 1, ForWriting = 2
 
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(source) Then
   Dim inputLine, outputLine
   Set f = fso.OpenTextFile(source, ForReading, False)
   Set f2 = fso.OpenTextFile(target, ForWriting, True)
   While Not f.AtEndOfStream
      inputLine = f.ReadLine
			outputline = parseme(inputLine)
      f2.Write outputline
   Wend
   f.Close
   f2.Close
   Set f2 = Nothing
   Set f = Nothing
   MsgBox "Done"
Else
   MsgBox source, vbOKOnly, "Source File Not Found"
End If
Set fso = Nothing
 
function parseme(strtext)
' remove trailing lines
	parseme = rtrim(strtext)
 
'remove carriage returns
	parseme = Replace(parseme, vbCr, "")
 
'remove line feeds
	parseme = Replace(parseme, vblf, "")
 
'find "</END??>" and add vbcrlf
	x = instr(parseme, "</END") 'if exists find a location 
'loop to find multiple '</end"'s
	do until x = 0 
			y = instr(x, parseme, ">")
			parseme = left(parseme, y+1) & vbcrlf & mid(parseme, y+1) 'starting on character past the ">"
			x = instr(y, parseme, "</END") 
	loop
end function

Open in new window

0
 
LVL 19

Expert Comment

by:weellio
ID: 20409426
hmm,.. i did a simple vbscript,.. but i'm sure you don't really have to change it to make it work with vb

just name the file something.vbs and edit the 'inputfile and outputfilenames.
or setup as arguments or something.
0
Monthly Recap

May was a big month for new releases from Linux Academy! Take a look at what our team built recently in our blog. You can access the newest releases from our blog.

 
LVL 19

Accepted Solution

by:
weellio earned 250 total points
ID: 20409435
tiny change
Dim source, target
source = "myfile.txt"
target = "myfile2.txt"
 
Dim fso, f, f2
dim x, y
Const ForReading = 1, ForWriting = 2
 
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(source) Then
   Dim inputLine, outputLine
   Set f = fso.OpenTextFile(source, ForReading, False)
   Set f2 = fso.OpenTextFile(target, ForWriting, True)
   While Not f.AtEndOfStream
      inputLine = f.ReadLine
			outputline = parseme(inputLine)
      f2.Write outputline
   Wend
   f.Close
   f2.Close
   Set f2 = Nothing
   Set f = Nothing
   MsgBox "Done"
Else
   MsgBox source, vbOKOnly, "Source File Not Found"
End If
Set fso = Nothing
 
function parseme(strtext)
' remove trailing lines
	parseme = rtrim(strtext)
 
'remove carriage returns
	parseme = Replace(parseme, vbCr, "")
 
'remove line feeds
	parseme = Replace(parseme, vblf, "")
 
'find "</END??>" and add vbcrlf
	x = instr(parseme, "</END") 'if exists find a location 
'loop to find multiple '</end"'s
	do until x = 0 
			y = instr(x, parseme, ">")
			parseme = left(parseme, y) & vbcrlf & mid(parseme, y+1) 'starting on character past the ">"
			x = instr(y, parseme, "</END") 
	loop
end function

Open in new window

0
 
LVL 1

Author Comment

by:Brothernod
ID: 20411400
I won't lie, I was really hoping for a nice clean vb.net example.

BUT

I needed this quick, and weelio did provide a quick complete solution.

Thank you.
0
 
LVL 1

Author Closing Comment

by:Brothernod
ID: 31412783
It's in VBA not VB.NET but I guess it was close enough since I'm in a hurry :)
0

Featured Post

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

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

In my previous article (http://www.experts-exchange.com/Programming/Languages/.NET/.NET_Framework_3.x/A_4362-Serialization-in-NET-1.html) we saw the basics of serialization and how types/objects can be serialized to Binary format. In this blog we wi…
Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

696 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