• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 274
  • Last Modified:

Break Binary String into Blocks

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
et1dkn
Asked:
et1dkn
  • 4
  • 2
  • 2
  • +2
1 Solution
 
Z_BeeblebroxCommented:
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
 
Z_BeeblebroxCommented:
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
 
Z_BeeblebroxCommented:
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
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
et1dknAuthor Commented:
Z B..........
Your routine returns the original string...
that is no "-" inserted in string.  Believe you have
some conflict with strBinary and strNewBinary.
0
 
rspahitzCommented:
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
 
rspahitzCommented:
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
 
Z_BeeblebroxCommented:
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
 
ramani_grCommented:
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
 
ArkCommented:
  s = "11010101111001"
   Debug.Print Format(s, "&&&&-&&&&-&&&&-&&&&")
Cheers
0
 
ArkCommented:
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
 
et1dknAuthor Commented:
Z B
Thanks much for the prompt reply.........
Dan
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.

Join & Write a Comment

Featured Post

Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

  • 4
  • 2
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now