Solved

# Break Binary String into Blocks

Posted on 2001-07-26
260 Views
VB6 Pro.......Win98 2nd Ed.

I have a binary string i.e.
11010101111001
Would like to break up into block of 4 i.e.
11-0101-0111-1001

0
Question by:et1dkn
• 4
• 2
• 2
• +2

LVL 7

Expert Comment

ID: 6324503
Here you go.

Zaphod.

Dim intPosition as integer
Dim strNewBinary as string
intPosition = len(strBinary)
If len(strBinary) mod 4 <> 0 then
strNewBinary = left(strBinary, len(strBinary) mod 4) & "-"
End if
For intPosition = len(strBinary) mod 4 to len(strBinary)
strNewBinary = strNewBinary & mid(strBinary, intPosition,4) & "-"
Next
strBinary = left(strBinary,len(strBinary)-1)
0

LVL 7

Expert Comment

ID: 6324509
Oh, strBinary contains the original binary string, and this will fail if the string is empty, so you might want to add a check at the start.

Zaphod.
0

LVL 7

Expert Comment

ID: 6324519
Doh, small error:

Dim intPosition as integer
Dim strNewBinary as string
intPosition = len(strBinary)
If len(strBinary) mod 4 <> 0 then
strNewBinary = left(strBinary, len(strBinary) mod 4) & "-"
End if
For intPosition = (len(strBinary) mod 4)+1 to len(strBinary)
strNewBinary = strNewBinary & mid(strBinary, intPosition,4) & "-"
Next
strBinary = left(strBinary,len(strBinary)-1)
0

Author Comment

ID: 6324741
Z B..........
Your routine returns the original string...
that is no "-" inserted in string.  Believe you have
some conflict with strBinary and strNewBinary.
0

LVL 22

Expert Comment

ID: 6324979
I was going to suggest using a masked edit box with the mask = "####-####-####-####" but I can't figure out how to right-justify without putting in a lot of code, in which case, just do it by hand:

Dim binstring As String
Dim z As Integer
binstring = "11010101111001"
For z = Len(binstring) - 3 To 1 Step -4
binstring = Left\$(binstring, z - 1) & "-" & Mid\$(binstring, z)
Next z
MsgBox binstring
0

LVL 22

Expert Comment

ID: 6324988
I guess this is similar to the Z_Beeblebrox comment, but by working backwords, you don't have to worry about the expanding size of the result and can therefore keep it in the same variable, if that's what you want.
0

LVL 7

Accepted Solution

Z_Beeblebrox earned 100 total points
ID: 6325032
Dim intPosition As Integer
Dim strNewBinary As String

intPosition = Len(strBinary)
If Len(strBinary) Mod 4 <> 0 Then
strNewBinary = Left(strBinary, Len(strBinary) Mod 4) & "-"
End If
For intPosition = (Len(strBinary) Mod 4) + 1 To Len(strBinary) Step 4
strNewBinary = strNewBinary & Mid(strBinary, intPosition, 4) & "-"
Next
strNewBinary = Left(strNewBinary, Len(strNewBinary) - 1)

I made a couple mistakes, I guess this just isn't my day. Anyways, that should do it, I actually tested it this time.

Zaphod.
0

LVL 1

Expert Comment

ID: 6325033
Try this.

Dim intPosition As Integer
Dim strNewBinary As String
Dim strbinary  As String

strbinary = "11010101111001"
For intPosition = Len(strbinary) To 0 Step -4
If intPosition - 3 > 0 Then
strNewBinary = Mid(strbinary, intPosition - 3, 4) & IIf(strNewBinary = "", "", "-") & strNewBinary
Else
strNewBinary = Mid(strbinary, 1, intPosition) & IIf(strNewBinary = "", "", "-") & strNewBinary
End If
Next
MsgBox strNewBinary
'11-0101-0111-1001

this could slove ur problem.

0

LVL 27

Expert Comment

ID: 6325090
s = "11010101111001"
Debug.Print Format(s, "&&&&-&&&&-&&&&-&&&&")
Cheers
0

LVL 27

Expert Comment

ID: 6325104
PS. If you want to split output string:

s = "11010101111001"
sBin = Format(s, "&&&&-&&&&-&&&&-&&&&")
and then use Split function.

or another solution

Private Type FullString
str As String * 16
End Type

Private Type PartString
First As String * 4
Second As String * 4
Third As String * 4
Fourth As String * 4
End Type

Private Sub Command1_Click()
Dim fs As FullString
Dim ps As PartString
RSet fs.str = "11010101111001"
LSet ps = fs
Debug.Print ps.First, ps.Second, ps.Third, ps.Fourth
End Sub

0

Author Comment

ID: 6325401
Z B
Thanks much for the prompt reply.........
Dan
0

## Featured Post

### Suggested Solutions

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…
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
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…
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…