Solved

# Binary File

Posted on 2000-02-15
174 Views
Experts,
Currently i am writing a program that opens a file as binary and it needs to input each byte and adjust it to 3 characters long (e.g.  if the byte is < 10 then add 2 zeros to the front of the number).  Currently i use the get statement to do this...the problem i have run into is that it takes so increadibly long to load the file.  Is there a quicker (much quicker preferably) way to do this?  Let me know...thanks!  Oh ya...sorry for the small ammount of points...i don't have many because i'm new.
0
Question by:compguru
• 9
• 7
• 2
• +1

LVL 14

Expert Comment

Post the snippet of code that you're currently using...

Cheers!
0

LVL 15

Expert Comment

Hi,

Can you also Mail me a copy of your code please and a sample of you file if possible.

Thanks,

T.
0

Author Comment

Dim string1(10000) As String

Open "c:\windows\desktop\test.exe" For Binary As #1
ProgressBar1.Max = FileLen("c:\windows\desktop\test.exe") + 1

'Input
For len1 = 1 To 200000000 Step 3000
For z = 0 To 2999
Get #1, len1 + z, tst
If CInt(tst) < 10 Then string1((len1 - 1) / 3000) = string1((len1 - 1) / 3000) & "00" Else If CInt(tst) < 100 Then string1((len1 - 1) / 3000) = string1((len1 - 1) / 3000) & "0"
string1((len1 - 1) / 3000) = string1((len1 - 1) / 3000) & CInt(tst)
If EOF(1) Then Exit For
Next z
ProgressBar1.Value = len1 + z
If EOF(1) Then Exit For
Next len1
Close #1
0

Author Comment

forgot this....

Dim tst As Byte
0

LVL 14

Accepted Solution

mcrider earned 100 total points
instead of doing this 6 times in the above code:

string1((len1 - 1) / 3000)

Do this right after the GET:

iVal = string1((len1 - 1) / 3000)

Then replace all of the "string1((len1 - 1) / 3000)" with:

string1(iVal)

That should speed your program quite a bit...

Cheers!
0

LVL 43

Expert Comment

For a start I would simplify the if statement a bit,

string1(len1 - 1) / 3000) = right("000" & trim(cstr(tst)),3)

should accomplish the task of prefixing with one or two zeros.
0

Author Comment

This seems to be causing an error....suggestions....?
------
For len1 = 1 To 200000000 Step 3000
For z = 0 To 2999
Get #1, len1 + z, tst
ival = string1((len1 - 1) / 3000)
If CInt(tst) < 10 Then string1(ival) = string1(ival) & "00" Else If CInt(tst) < 100 Then string1(ival) = string1(ival) & "0"
string1(ival) = string1(ival) & CInt(tst)
If EOF(1) Then Exit For
Next z
ProgressBar1.Value = len1 + z
If EOF(1) Then Exit For
Next len1
Close #1
0

LVL 14

Expert Comment

TimCottee, Yes, that too!

;-)
0

LVL 14

Expert Comment

Actually, that line:

iVal = string1((len1 - 1) / 3000)

Should have been:

iVal = (len1 - 1) / 3000)

(cut-n-paste booboo!)

Cheers!
0

LVL 14

Expert Comment

Dang! did it again... should be:

iVal = (len1 - 1) / 3000

Cheers!
0

Author Comment

how would i implement TimCottee's response?
0

Author Comment

mcrider...i got yours done...your definately getting some points for that! :)
0

Author Comment

I have one more question....i tried loading a larger file (1mb about).  Is there any possible way to load that quicker?  I don't care if it involves completely changing my code around (as long as it does the same thing)..but i really would like to be able to speed that loading time up.
0

LVL 14

Expert Comment

Tims solution would be implemented like this:

Dim string1(10000) As String

Open "c:\windows\desktop\test.exe" For Binary As #1
ProgressBar1.Max = FileLen("c:\windows\desktop\test.exe") + 1

'Input
For len1 = 1 To 200000000 Step 3000
For z = 0 To 2999
Get #1, len1 + z, tst
string1((len1 - 1) / 3000) = Right\$("000" & Trim(CStr(tst)), 3)
If EOF(1) Then Exit For
Next z
ProgressBar1.Value = len1 + z
If EOF(1) Then Exit For
Next len1
Close #1

Cheers!
0

LVL 14

Expert Comment

By the way, Tim's solution was missing a parenthesis...

Cheers!
0

Author Comment

so do you have any more suggestions to speed up this process?
0

LVL 14

Expert Comment

To do anything any faster, you'd have to leave the VB environment and do something in C...

Cheers!
0

LVL 14

Expert Comment

Thanks for the points! Glad I could help!

Cheers!
0

LVL 43

Expert Comment

Sorry about the missing parenthesis, I just typed it out and didn't check it.
0

## Join & Write a Comment Already a member? Login.

### Suggested Solutions

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library aâ€¦
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code thatâ€¦
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that aâ€¦
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This lâ€¦

#### 771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!