MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Ler ficheiro .json pelo VBA

    Compartilhe

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 12:22

    Boas
    Estou procurando por um codigo para ler um ficheiro .json (info.json) mas o que encontro ou é para excell ou para ficheiro .json numa pagina web.

    Meu ficheiro info.json contem:

    {"personal": {"path": "C:\\Users\\MeuNome\\MinhaPasta", "host": 00000000000, "is_team": false, "subscription_type": "Pro"}}


    O que pretendo é uma funcao que faça:


    1- Verifique em que pasta se encontra o ficheiro info.json e utilisa esse caminho para a funçao

    %APPDATA%\MinhaPasta\

    %LOCALAPPDATA%\MinhaPasta\


    2- Vai buscar a informaçao pretendida no ficheiro info.json

    Neste caso pretendo carregar a informaçao "path"
    o que me dara o resultado de - "C:\\Users\\MeuNome\\MinhaPasta"
    sendo que a informaçao pretendida sera - "C:\Users\MeuNome\MinhaPasta"

    Website onde encontrei alguma informaçao e codigos mas que nao consigo aplicar para meu uso:
    stackoverflow.com/questions/48808123/object-required-error-with-json-to-vba-converting-process
    [Não são permitidos links externos] - Copiar e colar no browser

    Desde já agradeço ao forum
    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 15:38

    Ta, mas qual a dificuldade ou erro encontrado amigo?

    Se o problema são as duas barras a mais, submeta a informação "path" a um Replace(path,"\\","\") que terá no padrão desejado!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 15:43

    O problema é que nao sei como fazer para ler o ficheiro info.json e retirar a informaçao "path".

    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 15:48

    Posta aqui o Exemplo desse arquivo .json e o código encontrado para Excel!

    Pois os códigos para Excel, na grande maioria funcionam perfeitamente para Access, com pequenas modificações é claro!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 16:09

    Junto envio o ficheiro Info.json
    para o codigo pode ver o codigo no seguinte link:
    stackoverflow.com/questions/48808123/object-required-error-with-json-to-vba-converting-process
    [Não são permitidos links externos]  -  Copiar e colar no browser

    github.com/VBA-tools/VBA-JSON
    [Não são permitidos links externos]  -  Copiar e colar no browser

    Cumprimentos
    Pedro Melo
    Anexos
    Ficheiro.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Kb) Baixado 10 vez(es)
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 18:59

    Dessa forma é possivel realizar a leitura do arquivo como TEXTO:


       Open CurrentProject.Path & "\Info.json" For Input As #1
          Line Input #1, strTexto
          Debug.Print strTexto
          MsgBox strTexto
       Close #1



    Coloque o comando a cima no Clique do Botão, e coloque o arquivo info.json na mesma pasta do Aplicativo.
    Vc receberá o conteúdo da Linha1 do arquivo de Texto na totalidade.


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 19:23

    Muito obrigado pela ajuda!
    Já é um grande avanço!
    converti sua formula para uma funçao:

    Public Function LerJson()
      Open CurrentProject.Path & "\Info.json" For Input As #1
         Line Input #1, strTexto
         Debug.Print strTexto
         LerJson strTexto
      Close #1
    End Function

    Ao colocar ?LerJson para verificar o resultado ele me apresenta correctamente a informaçao do Info.json:

    {"personal": {"path": "C:\\Users\\MeuNome\\MinhaPasta", "host": 00000000000, "is_team": false, "subscription_type": "Pro"}}

    mas tambem apresenta um erro:

    Run-time error '55':
    File already open


    Resolvi esse erro colocando:

    Public Function LerJson()
    On Error GoTo Erro
      Open CurrentProject.Path & "\Info.json" For Input As #1
         Line Input #1, strTexto
         Debug.Print strTexto
         LerJson strTexto
      Close #1
    Erro: Exit Function
    End Function

    2 Questões!

    1 - Essa maneira que usei para resolver o erro é a mais correcta?
    2 - Tem como obter somente "C:\\Users\\MeuNome\\MinhaPasta" como resultado?

    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 20:33

    Amigo, o problema ocorre pq vc chama a Função dentro da propria Função!

    Veja:
    Public Function LerJson()
      Open CurrentProject.Path & "\Info.json" For Input As #1
         Line Input #1, strTexto
         Debug.Print strTexto
         LerJson strTexto
      Close #1
    End Function




    Comente essa Linha!


    Essa forma que passei é um paliativo, pois eu nunca mexi com a interpretação desse tipo de arquivo! Certamente existe sim a forma correta de realizar a leitura dele, mas não consegui adaptar os exemplo, pois sempre apresenta um erro, que não tem nada a ver com o fato de ter sido criado para Excel. Falta algo que não sei o que é...


    Para Obter somente o Texto do Patch, pode utilizar junto, a função do Atheixeira separaEntreDuasStringsXML que resolverá seu problema!
    Veja a Função aqui: http://www.maximoaccess.com/t29286-importar-todas-as-nfe-nota-fiscal-eletronica-xml-de-uma-pasta-versao-xml-1-10-2-00-e-3-10


    Mude sua Função para:



    Public Function LerJson()

      Open CurrentProject.Path & "\Info.json" For Input As #1

         Line Input #1, strTexto

         'Ira pegar o Texto e separar o que tiver entre: (path": ") e (", "host)

         LerJson = Replace(separaEntreDuasStringsXML((strTexto), "path" & """: """, """, """ & "host"), "\\", "\")

      Close #1

    End Function



    Chame ela: 

    ex:

    MsgBox LerJson



    E terá o que precisa, mas lembre-se é de certa forma, uma gambiarra!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 21:12

    Muito obrigado pela ajuda!
    Agora ficou a funcionar correctamente pois descobri a que se devia o erro 55.

    A formula estava a abrir o ficheiro 2 vezes dai o erro

    Public Function LerJson()
     Open CurrentProject.Path & "\Info.json" For Input As #1
        Line Input #1, strTexto
        Debug.Print strTexto --------Primeira Abertura
        LerJson strTexto ------------Segunda Abertura

     Close #1
    End Function


    Bastou remover a Linha Debug.Print strTexto :

    Public Function LerJson()
     Open CurrentProject.Path & "\Info.json" For Input As #1
        Line Input #1, strTexto
        LerJson = Replace(separaEntreDuasStringsXML((strTexto), "path" & """: """, """, """ & "host"), "\\", "\")
     Close #1
    End Function


    Sendo que modifiquei a formula para:

    Public Function LerJson(Ficheiro As Variant)
      Open Ficheiro For Input As #1
           Line Input #1, strTexto
           LerJson = Replace(separaEntreDuasStringsXML((strTexto), "path" & """: """, """, """ & "host"), "\\", "\")
      Close #1
    End Function


    Assim so preciso chamar a formula e indicar o caminho:

    call LerJson(Caminho do ficheiro)

    Quero dar um MUITO OBRIGADO ao FabioPaes pela ajuda que me deu!

    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 21:15

    Bacana amigo, é uma pena não acharmos a melhor solução! Mas fica um paliativo que dá certo!

    Até a próxima se Deus quiser!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 21:16

    Já é um começo! E se olharmos bem já nao esta muito mal pois nao dá erro e faz o que se pretende!

    Mais uma vez MUITO OBRIGADO!

    Cumprimentos
    Pedro Melo

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 22:50

    Uma duvida:

    na parte: separaEntreDuasStringsXML((strTexto), "path" & """: """, """, """ & "host")

    se em vez de começar e acabar com (path": ") e (", "host) for só com: "

    nao estou percebendo como fazer!

    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 16/4/2018, 23:07

    Ficou um pouco confuso, devido o fato de no Texto ter " e :, sendo que o valor deve ser informado entre "" entao ficou confuso mesmo...


    Mas a Função deve ser informada assim:

    separaEntreDuasStringsXML(stringComValor,"ValorInicio","ValorFim")


    Digamos que eu tenha na StringComValor=" xxxx ValorInicio abcd123ValorFim "


    Se rodar a função, ele retornará: abcd123


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 23:17

    Tentar simplificar meu problema!

    digamos que tenho uma string strTexto com a seguinte informaçao:

    "aqui esta a informaçao pretendida" /correcto

    usando a funçao separaEntreDuasStringsXML() como devo colocar a string inicio e fim para obter o resultado:

    aqui esta a informaçao pretendida

    Tenho andado de volta dos " para conseguir obter o resultado mas sem sucesso.
    Nao consigo perceber como fazer a funçao perceber que a string de inicio é " e a de fim " /correcto

    Cumprimentos
    Pedro Melo

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 16/4/2018, 23:41

    Consegui resolver criando uma string:

    strInicio = Left$(strTexto, 1)

    esta string vai buscar o primeiro valor da string que é "

    e depois uso :

    strTexto = Replace(separaEntreDuasStringsXML((strTexto), "", " /correcto"), strInicio, "")
    LerRegedit = strTexto


    Ai Obtenho o resultado:

    aqui esta a informaçao pretendida


    Unico problema é se em vez de " a primeira coisa na string for uma letra
    ai ele ira remover a letra e o resultado podera ser completamente errado.

    Exemplo:

    strTexto = a "aqui esta a informaçao pretendida" /correcto
    strInicio = Left$(strTexto, 1) (strInicio = a)
    strTexto = Replace(separaEntreDuasStringsXML((strTexto), "", " /correcto"), strInicio, "")
    LerRegedit = strTexto

    Resultado:

    LerRegedit =  "qui est  informço pretendid"



    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 17/4/2018, 15:15

    Respondendo a Mensagem Anterior:

    Chame a função assim:

    MsgBox separaEntreDuasStringsXML(Me.Texto0, """", """")


    Observe que como o inicio é uma aspas " eu devo informar """" 4x para que o sistema intenda que é a abertura de uma aspas. kkkkkk

    Isso so acontece pq o Inicio e o FIm são caracteres reservados! que justamente é o que delimita o texto que queremos.


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    RicMelo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 14
    Registrado : 20/03/2018

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  RicMelo em 17/4/2018, 16:22

    Muito Obrigado. Agora sim esta a funcionar, eu bem tinha tentado com 2, 3, 4, 5, 6.... """ ja nem sei a quantas andava!
    sempre fica mais fiavel agora que com a strInicio = Left$(strTexto, 1) pois agora temos a certeza do que removemos!

    Cumprimentos
    Pedro Melo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido]Ler ficheiro .json pelo VBA

    Mensagem  FabioPaes em 17/5/2018, 14:51

    Caso seja de Interesse de Alguem, aqui uma forma de interpretação de arquivo .json
    [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

      Data/hora atual: 24/9/2018, 15:15