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

Cybernavigator

[Conversão de Código] Preciso de ajuda numa função [REsolvido 1/2]

2 mensagens neste tópico

Ora boas pessoal, é assim, estou a tentar traduzir uma parte de um programa de python, e estou com dificuldades numa parte, que é obter o tipo de objecto.

    def serialize(self, items):

        serial="a:"+str(len(items))+":{"

        for idx, item in enumerate(items):

            serial+="i:"+str(idx)+";"
            if item.__class__ == bool:
                v = ""
                if item == True:
                    v = "1"
                else:
                    v = "0"
                serial+="b:"+v+";"
            
            if item.__class__ == str:
                serial+="s:"+str(len(item))+':"'+str(item)+'";'
            elif item.__class__ == list:
                serial+=self.serialize(item)
            elif item.__class__ == int:
                serial+="i:"+str(item)+";"

        serial+="}"
        return serial

Ok, parece mais dificil do que é, deixo aqui a minha conversão pra vb

    Public Function Serialize(ByRef items As String)
        Dim serial As String
        Dim i As Integer
        serial = "a:" & items.Length & ":{"
        Dim j = items.Length - 1
        For i = 0 To j
            serial += "i:" & i & ";s:" & items.Chars(i).ToString.Length & ":" & Chr(34) & items.ToCharArray(i, 1) & Chr(34) & ";"
        Next
        serial += "}"
        Return serial
    End Function

Ok, agora como podem ver nesta parte do código python

            if item.__class__ == bool:
                v = ""
                if item == True:
                    v = "1"
                else:
                    v = "0"
                serial+="b:"+v+";"
            
            if item.__class__ == str:
                serial+="s:"+str(len(item))+':"'+str(item)+'";'
            elif item.__class__ == list:
                serial+=self.serialize(item)
            elif item.__class__ == int:
                serial+="i:"+str(item)+";"

ele vê se o objecto é uma string ou inteiro ou boolean.

Gostava de saber qual é a função do vb.net pra ver isto, e outra coisa

 for idx, item in enumerate(items):

calculo que nesta parte ele defina o item como a letra que está na seguinte posição, o idx sei que começa em 0 pelo output.

Sinceramente a minha funçao faz exactamente o mesmo, mas tenho medo que dê cagada mais prá frente.

Obrigado desde já.

Cumpz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, resolvi desta forma, criei uma class pra obter o tipo do item.

Aqui fica

    Private Function __Class__(ByVal item)
        Dim cena = item.GetType.FullName
        If InStr(cena, "String") Then
            __Class__ = "String"
        ElseIf InStr(cena, "Int32") Then
            __Class__ = "Integer"
        ElseIf InStr(cena, "Boolean") Then
            __Class__ = "Boolean"
        ElseIf InStr(cena, "[]") Then
            __Class__ = "List"
        End If
    End Function

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