How can I delete first 15 lines in a text file

I am using file to write log details. I want the size of the file to be less than 15k. So when ever it exceeds 15k i want to delete the oldest data. How can I delete the old data leaving the latest data. I am writing to the file with append mode.
lesaAsked:
Who is Participating?
 
VBDesignsCommented:
If it's a text file, this way should work:

Dim iFF as Integer
Dim lLength as Long
CONST MAX_FILE_LEN = 15000
Dim sValue as String * MAX_FILE_LEN

iFF = FreeFile

Open "c:\textfile.txt" for binary as #iFF
lLength = LOG (#iFF)
if lLength > MAX_FILE_LEN then
   Seek(#iFF), (lLength - MAX_FILE_LEN)
   Get #iFF, , sValue
endif

Close #iFF

Kill "c:\textfile.txt"

Open "c:\textfile.txt" for Binaryt as #iFF
Put #iFF, , sValue
Close # iFF
0
 
lesaAuthor Commented:
I want the oldest data to be deleted means the top data in the file because as I am using the append method latest will be at bottom. So plese let me know how can I do it.
0
 
lesaAuthor Commented:
I want the oldest data to be deleted means the top data in the file because as I am using the append method latest will be at bottom. So plese let me know how can I do it.
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
lesaAuthor Commented:
I want the oldest data to be deleted means the top data in the file because as I am using the append method latest will be at bottom. So plese let me know how can I do it.
0
 
lesaAuthor Commented:
I want the oldest data to be deleted means the top data in the file because as I am using the append method latest will be at bottom. So plese let me know how can I do it.
0
 
lesaAuthor Commented:
I want the oldest data to be deleted means the top data in the file because as I am using the append method latest will be at bottom. So plese let me know how can I do it.
0
 
vikiingCommented:
As the file you're working with is a sequential (text) one, the only thing you can do is:
a) Load file lines into an array (a vector), and calculate how many lines it has
b) Destroy original file and re-create a newer one, starting with line #n (where "n" depends on the amount of data you want to get rid of).

Code can be something like this:

Dim TextLines$(30000) : F%=FreeFile
Open <file> for input as F% : LC%=0
Do Until EOF(F%)
   LC%=LC%+1 : Line Input #F%,TextLines$(LC%)
Loop

Close #F% : Open <file> for output as #F%
For I%=N% to LC%   <==== Read below ====>
   Print #F%,TextLines$(I%)
Next I%

The value N% at For instruction, specifies which is the first line you want to keep in the file (toghether from there downwards). Doing so, you're chopping the first N%-1 lines.

Perhaps you want to chop the file in order its final size be EXACTLY 15 Kb. In that case, value N% must be found counting lengths of lines, this way:

FullSize%=LOF(F%) : N%=0
Do
   N%=N%+1 : FullSize%=FullSize%-Len(TextLines$(N%))-2
Loop Until FullSize%<=15360   '15360 = 15 * 1024 = 15 Kb

When FullSize% reaches 15K, N% will have the first line from which the rest of the file will fit into that size.


0
 
vikiingCommented:
I had a mess with "15k" and "15 lines". In the code I've posted, write out the For as

     For I%=16 to LC%

and forget the portion below (because N%=16, and doesn't need to be calculated)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.