[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

Binary File

Posted on 2000-02-15
19
Medium Priority
?
185 Views
Last Modified: 2010-05-02
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
Comment
Question by:compguru
  • 9
  • 7
  • 2
  • +1
19 Comments
 
LVL 14

Expert Comment

by:mcrider
ID: 2523335
Post the snippet of code that you're currently using...


Cheers!
0
 
LVL 15

Expert Comment

by:lyonst
ID: 2523396
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

by:compguru
ID: 2523397
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
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 

Author Comment

by:compguru
ID: 2523408
forgot this....

 Dim tst As Byte
0
 
LVL 14

Accepted Solution

by:
mcrider earned 400 total points
ID: 2523492
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

by:TimCottee
ID: 2523493
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

by:compguru
ID: 2523561
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

by:mcrider
ID: 2523565
TimCottee, Yes, that too!

;-)
0
 
LVL 14

Expert Comment

by:mcrider
ID: 2523581
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

by:mcrider
ID: 2523583
Dang! did it again... should be:

   iVal = (len1 - 1) / 3000


Cheers!
0
 

Author Comment

by:compguru
ID: 2523591
how would i implement TimCottee's response?
0
 

Author Comment

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

Author Comment

by:compguru
ID: 2523633
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

by:mcrider
ID: 2523691
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:mcrider
ID: 2523698
By the way, Tim's solution was missing a parenthesis...


Cheers!
0
 

Author Comment

by:compguru
ID: 2523713
so do you have any more suggestions to speed up this process?
0
 
LVL 14

Expert Comment

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


Cheers!
0
 
LVL 14

Expert Comment

by:mcrider
ID: 2524065
Thanks for the points! Glad I could help!


Cheers!
0
 
LVL 43

Expert Comment

by:TimCottee
ID: 2526230
Sorry about the missing parenthesis, I just typed it out and didn't check it.
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Question has a verified solution.

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

I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Suggested Courses
Course of the Month11 days, 11 hours left to enroll

640 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