Solved

Convert ASCII to String

Posted on 2007-12-04
17
5,513 Views
Last Modified: 2013-11-27
I have a table containing a lot of text, contained within the text is ASCII coding, I am looking for a way to update the ASCII code to its string value
E.g. change [ to [
0
Comment
Question by:daverichardson
  • 6
  • 4
  • 3
  • +2
17 Comments
 
LVL 75
ID: 20404292
Well, Chr(91) will return [

mx
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 20404297
you will need an update query

update NameOftable
set [fieldName]=replace([fieldName],"#91",chr(91))

0
 
LVL 75
ID: 20404307
Chr(Replace("&#91","&#",""))  

returns

[
0
 

Author Comment

by:daverichardson
ID: 20404417
Thanks for the replies, I should have made myself a bit clearer [ isnt the only ASCII coding that was just an example there are lots of different characters. I was looking for a way to convert all ASCII coding to string.
0
 
LVL 119

Expert Comment

by:Rey Obrero
ID: 20404493
well, you have to give more info regarding your table.

you  will need a function to do that.
*open the table as recordset
*locate and replace all occurence of the ASCII characters


if you can zip your db and upload (Now, i'll be busy later on) here www.ee-stuff.com 
i can write you a function to do that..


0
 
LVL 15

Expert Comment

by:JimFive
ID: 20404560
Create a Function as below.  Use the Function in your query.

--Jimfive
Function htmlUnFormat(s As String) As String

Dim done As Boolean

Dim LocStart, LocEnd As Integer

Dim char As String
 

done = False

While Not done

    LocStart = InStr(1, s, "&#")

    If LocStart = 0 Then

        done = True

    Else

        LocEnd = InStr(LocStart, s, ";")

        If LocEnd > LocStart Then

            char = Mid(s, LocStart + 2, LocEnd - LocStart - 2)

            If IsNumeric(char) Then

                s = Replace(s, Mid$(s, LocStart, LocEnd - LocStart + 1), Chr(CInt(char)))

            End If

        Else

            done = True

        End If

    End If

Wend

htmlUnFormat = s

End Function

Open in new window

0
 

Author Comment

by:daverichardson
ID: 20404650
0
 

Author Comment

by:daverichardson
ID: 20404733
JimFive i get invalid procedure call or argument on this line
s = Replace(s, Mid$(s, LocStart, LocEnd - LocStart + 1), Chr(CInt(char)))
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 15

Expert Comment

by:JimFive
ID: 20405217
Hmm...Try Mid instead of Mid$
--
JimFive
0
 
LVL 5

Expert Comment

by:TheGD
ID: 20405267
Your problem is very simple and can be solved by the following code.

Follow the following instructions:
1. Create a New Module in your Database.
2. Copy Paste the following code into that newly created Module that I have written just for your custom need
3. Press F5 and then Press Enter.
4. Enter Table Name to FIX, i.e. to replace ALL &#code; patterns with their character equivalents

I have tested it on your Uploaded Table and found it fully functionaly and bugs free, so Enjoy!

Option Compare Database
 

Function ConvertASCII(s As String) As String

    Dim str As String, st As Integer, prevst As Integer, i As Integer

    str = ""

    st = 1

    i = 0

    Do

        i = InStr(st, s, "&#")

        If i <> 0 Then

            If i <> 1 Then

                str = str + Mid(s, st, i - st)

            End If

            st = InStr(i, s, ";") + 1

            str = str + ChrW(Int(Mid(s, i + 2, st - 1 - i - 2)))

        Else

            str = str + Mid(s, st)

        End If

    Loop While i <> 0

    

    ConvertASCII = str

End Function
 

Sub FixTable()

    Dim r As Recordset

    Dim TableName As String

    

    TableName = InputBox("Enter Table Name to Fix ASCIIs", "Table Name", "tmp")

    'On Error GoTo Err

    Set rs = CurrentDb.OpenRecordset("Select * From " & TableName)

    Do While Not rs.EOF

        rs.Edit

        

        For i = 0 To rs.Fields.Count - 1

            rs.Fields(i) = ConvertASCII(rs.Fields(i))

        Next

        

        rs.Update

        rs.MoveNext

    Loop

    rs.Close

    

    MsgBox "Done!"

    

    Exit Sub

Err:

    If Err.Number = 3078 Then

        MsgBox "The table name is invalid. No such table in the current database.", vbCritical, "Table not exist"

    Else

        MsgBox "Error: " & Err.Description

    End If

End Sub

Open in new window

0
 

Author Comment

by:daverichardson
ID: 20405310
That didnt work either, Its throwing the error on this value &#8482;
0
 
LVL 75
ID: 20405353
I believe 8482 is in the extended ASCII set ...


"The ChrW function returns a String containing the Unicode character except on platforms where Unicode is not supported, in which case, the behavior is identical to the Chr function"


mx
0
 

Author Comment

by:daverichardson
ID: 20405472
TheGD that works great, except if it comes across a null field then I get invalid use of null error
0
 
LVL 15

Expert Comment

by:JimFive
ID: 20405569
As DatabaseMX suggested.  Change the Chr to ChrW
--
JimFive
0
 
LVL 15

Accepted Solution

by:
JimFive earned 125 total points
ID: 20405604
It also appears that my code will have a problem if the string contains a &# that does not indicate a valid character. e.g. a string like: "What the &#!*; is this"

Try this revision:
Function htmlUnFormat(s As String) As String

Dim done As Boolean

Dim LocStart, LocEnd As Integer

Dim char As String
 

done = False

While Not done

    LocStart = InStr(1, s, "&#")

    If LocStart = 0 Then

        done = True

    Else

        LocEnd = InStr(LocStart, s, ";")

        If LocEnd > LocStart Then

            char = Mid(s, LocStart + 2, LocEnd - LocStart - 2)

            If IsNumeric(char) Then

                s = Replace(s, Mid(s, LocStart, LocEnd - LocStart + 1), ChrW(CInt(char)))

            Else

                done = True

            End If

        Else

            done = True

        End If

    End If

Wend

htmlUnFormat = s

End Function

Open in new window

0
 
LVL 5

Assisted Solution

by:TheGD
TheGD earned 125 total points
ID: 20409379
O Yes, the Null field was not not in your uploaded database so this error didnt came across me. Here is the revision of my previous code in which All the Null Fields would be ignored:
Option Compare Database
 

Function ConvertASCII(s As String) As String

    Dim str As String, st As Integer, prevst As Integer, i As Integer

    str = ""

    st = 1

    i = 0

    Do

        i = InStr(st, s, "&#")

        If i <> 0 Then

            If i <> 1 Then

                str = str + Mid(s, st, i - st)

            End If

            st = InStr(i, s, ";") + 1

            str = str + ChrW(Int(Mid(s, i + 2, st - 1 - i - 2)))

        Else

            str = str + Mid(s, st)

        End If

    Loop While i <> 0

    

    ConvertASCII = str

End Function
 

Sub FixTable()

    Dim r As Recordset

    Dim TableName As String

    

    TableName = InputBox("Enter Table Name to Fix ASCIIs", "Table Name", "tmp")

    On Error GoTo Err

    Set rs = CurrentDb.OpenRecordset("Select * From " & TableName)

    Do While Not rs.EOF

        rs.Edit

        

        For i = 0 To rs.Fields.Count - 1

            rs.Fields(i) = ConvertASCII(rs.Fields(i))

        Next

        

        rs.Update

        rs.MoveNext

    Loop

    rs.Close

    

    MsgBox "Done!"

    

    Exit Sub

Err:

    If Err.Number = 3078 Then

        MsgBox "The table name is invalid. No such table in the current database.", vbCritical, "Table not exist"

    ElseIf Err.Number = 94 Then 'IGNORE NULL FIELD

        Resume Next

    Else

        MsgBox "Error: " & Err.Description

    End If

End Sub

Open in new window

0
 

Author Comment

by:daverichardson
ID: 20409669
Thanks Guys
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

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

I originally created this report in Crystal Reports 2008 where there is an option to underlay sections. I initially came across the problem in Access Reports where I was unable to run my border lines down through the entire page as I was using the P…
Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
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…
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

919 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now