Write Additional Data within a txt File

M

Mike H.

I want to open a txt file, read it until I find a line that contains certain
info and then append additional data on to that line. The line may be in the
middle of the file. How can I do this?
 
B

Bill Renaud

<<I want to open a txt file, read it until I find a line that contains
certain info and then append additional data on to that line. The line may
be in the middle of the file. How can I do this?>>

Depends on how big the file is. For a small file, use the OpenText method
to import into a worksheet, find the line that needs to be appended or
changed, then SaveAs to a new text file.

For a file that is too big to fit on a worksheet, then you will have to use
either "Microsoft Scripting Runtime" or "Windows Script Host Object Model".
Set a reference to one of them in the Tools|References dialog box. Both of
them have FileSystemObject and TextStream objects available. Open the file,
copy lines to a new file until you come to the line to be changed, change
it, write it out, and continue copying lines. Download the Microsoft
Windows Script Help file (SCRIPT56.CHM) for additional details.
 
R

Rick Rothstein \(MVP - VB\)

Here is another way to do it. First, use this code to read the entire file
into a String variable (named TotalFile for this example), Split the text
into individual Lines, find the line you are interested in, Join the
individual lines into a single text string and save it back out...

Dim X As Long
Dim FileNum As Long
Dim TotalFile As String
Dim Lines() As String
FileNum = FreeFile
Open "C:\TEMP\Test.txt" For Binary As #FileNum
TotalFile = Space(LOF(FileNum))
Get #FileNum, , TotalFile
Close #FileNum
Lines = Split(TotalFile, vbNewLine)
For X = 0 To UBound(Lines)
If Lines(X) = <<text you are interested in>> Then
Lines(X) = Lines(X) & "<<text to add to end of line>>"
End If
Next
TotalFile = Join(Lines, vbNewLine)
FileNum = FreeFile
Open "C:\TEMP\Test.txt" For Output As #FileNum
Print #FileNum, TotalFile
Close #FileNum

Fill in the parts unique to your program (the Filename with Path, and the
info inside the For-Next loop.

Rick
 
R

Rick Rothstein \(MVP - VB\)

I should probably include a standard warning... try you code out on a test
file first... when you write out the text back to the same file you read it
in from (what I assumed you want to do), the original file is totally
overwritten... if you did not write back the correct info (maybe you have a
typo in a variable name or you got creative and changed my code in a way
that isn't right), the data in the original file will be lost for good.

Rick
 
M

Mike H.

Rick, I like your response. I'll implement it. I think I will also rename
the original file as I do this in the potential event that someone else
writes to this file in the meantime. then I can check for the existence of
the file when I am ready to "put it back" and if there is one, take those
contents and append to the bottom of my "new file". Then check again and so
on and finally rename the whole thing to the original file name. This is for
a log file of activity. I suppose I could have used an access db to write
the stuff too also, but just now thought of that. I like the text file for
something like this because it is so fast and then provides an easy avenue
for reading the data back in without having the users having to have anything
else installed on their pc's. The appending is to append an unload time for
a file so I can track logins and logouts.

One issue I have noticed. I put the "logout" procedure in before close
event on the worksheet "area" but if a users clicks the red X and then
changes his mind about exiting, I still get the event action it seems. Is
there a "later" event that I should monitor for exiting that can't be fooled.
 
R

Rick Rothstein \(MVP - VB\)

One issue I have noticed. I put the "logout" procedure in before close
event on the worksheet "area" but if a users clicks the red X and then
changes his mind about exiting, I still get the event action it seems. Is
there a "later" event that I should monitor for exiting that can't be
fooled.

There the UserForm events QueryClose and Terminate that you can put code in
to be executed when a UserForm is closed.

Rick
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top