• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

brink@ero

[VB.NET] - Conversor de texto phpbb para SMF

2 mensagens neste tópico

Bem eu sei que já devia ter feito isto à bastante tempo, enfim...

Eu fiz estes programas em cima do joelho como um desenrasco para facilitar a conversão, nunca preocupei-me com o design (como referido no tópico).

Para criar o programa, verificava os textos com caracteres incorrectos e encontrava a relação do entre o caracter incorrecto e o correcto.

Nunca tive o trabalho em aprofundar mais. Até agora ainda não encontrei falhas nem foi reportado falhas na conversão.

Eu sei que esta tabela não está completa, mas para cada nova situação, mais um case  :P

O principal motor de tradução é:

        '  char    ASCII            Simbolo Equivalente
        '   à  -   195     ->  Não tem símbolo equivalente, o char depois deste indica o char correcto:
        ' 	³   -   179     ->  ó
        '   ´   -   180     ->  ô
        '   ©   -   169     ->  é
        '   §   -   167     ->  ç
        '   £   -   163     ->  ã
        '   ¡   -   161     ->  á
        '   º   -   186     ->  ú
        '   ­   -   173     ->  í
        '   µ   -   181     ->  õ
        '   ª   -   170     ->  ê
        '   ¢   -   162     ->  â
        '   ?   -   63      ->  Á
        '   ‰   -   137     ->  É
        '   ¨   -   168     ->  è
        '   ¼   -   188     ->  u   (devido a este exemplo: conseqüências)
        '   ‡   -   135     ->  Ç
        '   ƒ   -   131     ->  Ã
        '      -   194     ->  Não tem símbolo equivalente, o char depois deste indica o char correcto:
        '   º   -   186     ->  º   (não faz nada, é o único exemplo conhecido)
        '   â   -   226     -+
        '   €   -   128     -+
        '   œ   -   156     -+
        '    “actionsâ€?  -+> [actions]


        For i = 0 To (Text1.Length - 1)


            If Asc(Text1.Chars(i)) = 195 Then
                i = i + 1
                Select Case Asc(Text1.Chars(i))
                    Case 179
                        auxiliar = "ó"c
                    Case 180
                        auxiliar = "ô"c
                    Case 169
                        auxiliar = "é"c
                    Case 167
                        auxiliar = "ç"c
                    Case 163
                        auxiliar = "ã"c
                    Case 161
                        auxiliar = "á"c
                    Case 186
                        auxiliar = "ú"c
                    Case 173
                        auxiliar = "í"c
                    Case 181
                        auxiliar = "õ"c
                    Case 170
                        auxiliar = "ê"c
                    Case 162
                        auxiliar = "â"c
                    Case 63
                        auxiliar = "Á"c
                    Case 137
                        auxiliar = "É"c
                    Case 168
                        auxiliar = "è"c
                    Case 188
                        auxiliar = "u"c
                    Case 135
                        auxiliar = "Ç"c
                    Case 131
                        auxiliar = "Ã"c
                    Case Else
                        auxiliar = Text1.Chars(i)
                End Select
            ElseIf Asc(Text1.Chars(i)) = 194 Then
                i = i + 1
                auxiliar = Text1.Chars(i)
            ElseIf Asc(Text1.Chars(i)) = 226 Then
                If (Asc(Text1.Chars(i + 1)) = 128 And Asc(Text1.Chars(i + 2)) = 63) Then
                    i = i + 2
                    auxiliar = "]"c
                ElseIf (Asc(Text1.Chars(i + 1)) = 128 And Asc(Text1.Chars(i + 2)) = 156) Then
                    i = i + 2
                    auxiliar = "["c
                End If
            Else
                auxiliar = Text1.Chars(i)
            End If

            Text2 = Text2 + auxiliar

        Next

Na versão 1.00 (Beta)

Tem o seguinte código:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Text1, Text2 As String
        Dim i, n_char As Integer
        Dim auxiliar As Char

        Text1 = Me.TextBox1.Text
        Me.TextBox1.Text = ""

       'TRADUÇÃO

        Me.TextBox1.Text = Text2
        'Me.Label1.Text = Text2

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.TextBox1.Text = ""
    End Sub

Na versão 2.00

Já não foi necessário colar o texto numa textbox:


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Text1, Text2 As String
        Dim i, n_char As Integer
        Dim auxiliar As Char

       'copiar o texto que está na área de transferência para uma string
        Text1 = Clipboard.GetDataObject().GetData(DataFormats.Text)

       'TRADUÇÃO

       'copiar a string para a área de transferência
        Clipboard.SetDataObject(Text2)
        'Me.Label1.Text = Text2

    End Sub

Na versão 1.00 CTR (beta)

Numa tentativa de autonomia, criei um programa que fizesse a conversão na página com o máxima rapidez possível:

    Declare Function keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) As Long
    Private Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer

  'Sites que pesquisei:
    'http://www.codeproject.com/useritems/screen.asp
    'http://vbnet.mvps.org/index.html?code/bitmap/printscreenapi.htm
    'http://www.codeguru.com/vb/gen/vb_system/keyboard/article.php/c4835/
    'http://www.developerfusion.co.uk/show/274/

    Dim flag As Boolean = False

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim lKey As Integer
        Dim Text1, Text2 As String
        Dim i, n_char As Integer
        Dim auxiliar As Char



        'Ctrl press?
        lKey = GetKeyState(&H11)
        If ((lKey And &H8000) And flag) Then

            keybd_event(&H11, 0, &H2, 0)    ' Ctrl Release
            'Ctr-a
            keybd_event(&H11, 0, 0, 0)      'Ctrl Press
            keybd_event(65, 0, 0, 0)         '‘a’ Press
            keybd_event(65, 0, &H2, 0)       '‘a’ Release
            keybd_event(&H11, 0, &H2, 0)    ' Ctrl Release
            'Ctr-c
            keybd_event(&H11, 0, 0, 0)      'Ctrl Press
            keybd_event(67, 0, 0, 0)         '‘c’ Press
            keybd_event(67, 0, &H2, 0)       '‘c’ Release
            keybd_event(&H11, 0, &H2, 0)    ' Ctrl Release

            'Copia para uma string o que está na área de transferência
            Text1 = Clipboard.GetDataObject().GetData(DataFormats.Text)

               'TRADUÇÃO

            'Copia a string para a ârea de transferência
            Clipboard.SetDataObject(Text2)

            'Ctr-v
            keybd_event(&H11, 0, 0, 0)      'Ctrl Press
            keybd_event(86, 0, 0, 0)         '‘v’ Press
            keybd_event(86, 0, &H2, 0)       '‘v’ Release
            keybd_event(&H11, 0, &H2, 0)    ' Ctrl Release

        End If

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If ("Activar" = Me.Button1.Text) Then
            flag = True
            Me.Button1.Text = "Desactivar"
        Else
            flag = False
            Me.Button1.Text = "Activar"
        End If
    End Sub

Agora quem quiser fazer o seu programa à sua maneira, tem aqui todo o meu desenvolvimento. O que podem tambem desenvolver algo melhor noutra linguagem.

Mais informações -> PM

Cumpr. bk@ero    :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa... :D

Isto são programas simples mas é sempre bom ver o código...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora