Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Tricky Problem in Visual Basic

Posted on 2002-06-05
8
198 Views
Last Modified: 2013-11-25
Hi,

I have 2 variables kept in string value

strVar1 = "010101010110101.......... " 88 characters
strVar2 = "101001111111111........... " 88 characters

Is there any way of directly OR'ing the values without
writing a function and taking each digit in array and OR'ing

Result should be "11110111111......... "

Thanks,
0
Comment
Question by:Pankaj27
8 Comments
 
LVL 43

Expert Comment

by:TimCottee
ID: 7055944
Simply put, no as there is no intrinsic Binary conversion. Your number anyway would be of the order of  1.54742504910673E+26 so that would be a pain to convert to a decimal or double. This function will do the trick pretty quickly.

Private Sub Command2_Click()
    strVar1 = "010101010110101" '88 characters
    strVar2 = "101001111111111" '88 characters
    MsgBox MyOr(strVar1, strVar2)
End Sub

Private Function MyOr(ByVal BinString1 As String, ByVal BinString2 As String) As String
    Dim strResult As String
    Dim intPos As Integer
    For intPos = 1 To Len(BinString1)
        strResult = strResult & (CInt(Mid(BinString1, intPos, 1)) Or CInt(Mid(BinString2, intPos, 1)))
    Next
    MyOr = strResult
End Function
0
 
LVL 1

Author Comment

by:Pankaj27
ID: 7055969
yes TimCottee,

I have done the Same using Function. But I wanted to avoid the looping during the Or'ing activity (88 times in my case) as this function in turn is called for lot many time depending upon the data coming from server.

0
 
LVL 43

Expert Comment

by:TimCottee
ID: 7055978
Well without being able to convert the binary into a number of some datatype or other which you can then do the OR function on directly there is little option. You may be able to create a C++ program (standard dll) that can take your strings and convert to numbers then perform the OR function on the result and return it as a string but in straight VB I don't see an alternative I am afraid.
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
LVL 44

Expert Comment

by:Arthur_Wood
ID: 7055995
your only hope would be to break the 88 character string of Binary digits into 3 LONGS (32 bits each - totakl allows up to 96 bits), then you could OR the corresponding pieces....That might offer a more satisfactory approach.

Arthur Wood
0
 
LVL 3

Expert Comment

by:MCummings111400
ID: 7056201
Pankaj27,
   Have you profiled your application to see how long this routine is taking to perform your operation? I doesn't seem like this would eat up that much time, as compared to converting to a numeric format , OR'ing, then converting back.
0
 
LVL 3

Expert Comment

by:MCummings111400
ID: 7056209
Second,
    Would it be possible to break the string down into multiples of 16, or 32? Is 88 characters coming from the server at a time?
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 7057556
hearing...
0
 
LVL 1

Accepted Solution

by:
BabyFace earned 50 total points
ID: 7058032
There is not much you can do. A literal "1" is not a 1, likewise for "0". The following code may help you. It is capable of ORing two strings of length 1,000,001 in 0.453125 seconds on a P4 1.5 Ghz. This is not much computing time... Hope you could use it.

Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim b1() As Byte
Dim b2() As Byte
Dim b3() As Byte
Dim i As Long
s1 = "010101010110101"
s2 = "101001111111111"
b1 = StrConv(s1, vbFromUnicode)
b2 = StrConv(s2, vbFromUnicode)
ReDim b3(UBound(b1))
For i = 0 To UBound(b1)
    If b1(i) = 49 Or b2(i) = 49 Then
        b3(i) = 49
    Else
        b3(i) = 48
    End If
Next i
s3 = StrConv(b3, vbUnicode)
Debug.Print s3
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
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…

839 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