Converter log’s de Excel para arquivos ADIF

O processo de conversão de log’s de MS Excel© para ADIF é relativamente simples e pode ser feito recorrendo a um pouco de programação em VBA. Através deste link pode consultar as especificações do ADIF 1.0 que é utilizado pela maioria dos programas de registo, é importante que leia este documento.

Para iniciar um processo de conversão baseado neste tutorial começe por criar um arquivo em MS Excel©. Na primeira linha escreva o nome dos campos que vai querer importar (Consulte as especificações do ADIF 1.0 relativamente ao nome dos campos). Ainda na primeira linha, digite “ADIF RAW” na última célula, é aqui que vai ser escrito o texto em ADIF.

A folha de cálculo fica com um aspecto parecido com este (mas ainda sem os dados na linha 2). Embora o formato ADIF não especifique um número mínimo de campos, no mínimo o seu registo de QSO deve ter valores para Call, QSO_Date, Time_On, Band e Mode.

De seguida seleccione toda a folha e formate as células como texto.

Grave o arquivo como xls2adi.xls (folha de cálculo do MS Excel©)

Vamos agora escrever e inserir o código em VBA. Vá a Ferramentas/Macros e clique em Editor de Visual Basic (Alt+F11).

No editor de VBA clique duas vezes em ‘EsteLivro’ que está na janela ‘Project – VBAProject’. É aqui que vai ficar o bloco de código principal que vai ser executado quando abrir novamente este arquivo.

O bloco de código que se segue define algumas variáveis e chama a função fCampoAdifValido (linha 05) que vai verificar se o nome do campo que está na primeira linha corresponde à especificação do ADIF. Se todos os nomes dos campos estiverem correctos a função chama o procedimento pEscreveAdif (linha 09) que vai escrever o registo em ADIF, caso um dos campos tenha um nome inválido a função mostra uma mensagem de erro (linha 07) e termina.

Copie/cole ou digite o seguinte código:

 

Private Sub Workbook_Open()
  Dim bNomeDoCampoValido As Boolean
  iUltimaLinha = fQualEAUltimaLinha(conLinhaInicial)
  sUltimaColuna = fQualEAUltimaColuna(conColunaInicial)
  bNomeDoCampoValido = fCampoAdifValido(conColunaInicial, sUltimaColuna)
    If bNomeDoCampoValido = False Then
      MsgBox ("Foram encontrados nomes de campo inválidos" & vbCrLf & "Remova as colunas preenchidas a vermelho!")
    Else
      pEscreveAdif
    End If
End Sub

No editor de VBA clique em Insert/Module. É neste módulo vai ficar o restante código que é chamado pelo bloco principal.

As constantes conLinhaInicial (linha 02 do próximo bloco) e conColunaInicial (linha 03 do próximo bloco) definem que a linha 2 (da folha de cálculo) tem o primeiro registo e que a coluna A (da folha de cálculo) o primeiro campo.

As funções fQualEAUltimaLinha (linha 08 do próximo bloco) e fQualEAUltimaColuna (linha 17 do próximo bloco) vão determinar qual a última linha e coluna de dados. Isto impôe que uma célula vazia significa o fim do Log de registos.

A função fCampoAdifValido (linha 05 do bloco anterior) testa a validade do nome do campo. No ciclo ‘Select Case sNomeDoCampo’ (linha 31 do próximo bloco) podem ser adicionados mais campos de acordo com a especificação do ADIF.

O procedimento pEscreveAdif (linha 09 do bloco anterior) vai escrever o texto em ADIF na coluna que tem “ADIF RAW” na primeira linha. Neste procedimento é retirado o ifen do campo QSO_DATE, os dois pontos do campo TIME_ON e acrescentado um M no fim do campo BAND. Para tornar esta macro mais rigorosa podem ser impostas mais condições de verificação de dados dentro deste procedimento.

Copie/cole ou digite o seguinte código dentro do módulo:

 

Option Explicit
Public Const conLinhaInicial As Integer = 2
Public Const conColunaInicial As String = "A"
Public iUltimaLinha As Integer
Public sUltimaColuna As String
Public iAdifRaw As Integer

Public Function fQualEAUltimaLinha(iPrimeiraLinha As Integer) As Integer
  Dim iValRecebido As Integer
  iValRecebido = iPrimeiraLinha
    Do While Len(Folha1.Cells(iValRecebido, "A")) > 0
      iValRecebido = iValRecebido + 1
    Loop
  fQualEAUltimaLinha = iValRecebido - 1
End Function

Public Function fQualEAUltimaColuna(sPrimeiraColuna As String) As String
  Dim iValRecebido As Integer
  iValRecebido = Asc(sPrimeiraColuna)
    Do While Len(Folha1.Cells(1, Chr(iValRecebido))) > 0
      iValRecebido = iValRecebido + 1
    Loop
  fQualEAUltimaColuna = Chr(iValRecebido - 1)
End Function

Public Function fCampoAdifValido(sPrimeiraColuna As String, sUltimaColuna As String) As Boolean
  Dim sNomeDoCampo As String
  Dim iColunaCorrente As Integer
    For iColunaCorrente = Asc(sPrimeiraColuna) To Asc(sUltimaColuna)
      sNomeDoCampo = LCase(Folha1.Cells(1, iColunaCorrente - 64))
      Select Case sNomeDoCampo
        Case Is = "band": fCampoAdifValido = True
        Case Is = "call": fCampoAdifValido = True
        Case Is = "cqz": fCampoAdifValido = True
        Case Is = "mode": fCampoAdifValido = True
        Case Is = "qso_date": fCampoAdifValido = True
        Case Is = "rst_rcvd": fCampoAdifValido = True
        Case Is = "rst_sent": fCampoAdifValido = True
        Case Is = "srx": fCampoAdifValido = True
        Case Is = "stx": fCampoAdifValido = True
        Case Is = "time_on": fCampoAdifValido = True
        Case Is = "adif raw"
          fCampoAdifValido = True
          iAdifRaw = iColunaCorrente - 64
        Case Else
          Folha1.Cells(1, iColunaCorrente - 64).Interior.Color = RGB(255, 0, 0)
          fCampoAdifValido = False
        End Select
      Next
End Function

Public Sub pEscreveAdif()
  Dim iLinhaCorrente As Integer
  Dim iColunaCorrente As Integer
  Dim sTextoNaCelula As String
  Dim sLinhaEmAdif As String
  For iLinhaCorrente = conLinhaInicial To iUltimaLinha
    sLinhaEmAdif = ""
    For iColunaCorrente = Asc(conColunaInicial) To Asc(sUltimaColuna) - 1
      If LCase(Folha1.Cells(1, Chr(iColunaCorrente))) = "band" Then
        sTextoNaCelula = Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)) & "M"
      Else
        If LCase(Folha1.Cells(1, Chr(iColunaCorrente))) = "qso_date" Then
          sTextoNaCelula = Replace(Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), "-", "")
        Else
          If LCase(Folha1.Cells(1, Chr(iColunaCorrente))) = "time_on" Then
            sTextoNaCelula = Replace(Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), ":", "")
          Else
            sTextoNaCelula = Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente))
          End If
        End If
      End If
      sLinhaEmAdif = sLinhaEmAdif & "<" & LCase(Folha1.Cells(1, Chr(iColunaCorrente))) & ":" & Len(sTextoNaCelula) & ">" & sTextoNaCelula
    Next
    Folha1.Cells(iLinhaCorrente, iAdifRaw) = sLinhaEmAdif & "<" & "EOR" & ">"
  Next
End Sub

 

Clique em File/Save xls2adi.xls e feche o editor de VBA.

Agora copie os dados dos seus arquivos de MS Excel© que quer converter para as colunas apropriadas, grave no final e encerre o MS Excel©.

Pode ter necessidade de alterar as definições de sugurança do MS Excel© para executar macros, se necessário vá a Ferramentas/Macros e clique em Segurança, escolha um nível mais baixo. Este procedimento foi escrito para o MS Excel© em MS Windows XP© (ambos em versão portuguesa). Se vai utilizar este código noutra língua, por exemplo em inglês, substitua o termo ‘Folha1’ por ‘Sheet1’

Ao fazer duplo clique no arquivo xls2adi.xls, o código que acabámos de inserir vai ser executado e na coluna “ADIF RAW” está o nosso Log em formato ADIF.

Agora para terminar, seleccione o conteúdo da coluna “ADIF RAW” e copie (Ctrl+C), inicie o Bloco de Notas (Notepad) e cole (Ctrl+V). Grave o arquivo com a extenção adi.

Este exemplo de código é de utilização livre, pode-o utilizar sem restrições. É um exemplo muito simples daquilo que pode ser feito apenas recorrendo ao VBA (Visual Basic for Applications). Complemente este código com validações mais precisas, nomeadamente nos campos ‘qso_date’ e ‘time_on’, onde os formatos devem condizer com a especificação ADIF. Se detectar algum erro ou tiver alguma dúvida, não hesite em comentar. Espero que o artigo lhe seja util.

Tags: ,

Instalar placas gráficas NVIDIA no Debian

Pois é, mais um ‘How to …’ e novamente sobre as gráficas da nVidia, a diferença é que este para mim funciona na perfeição (tanto no Debian como no Ubuntu).

A primeira recomendação é visitar o site de descarga de drivers da NVIDIA, escolher o modelo da placa, o OS (no meu caso Linux 32-bit) e a linguagem. A opção 2 não funciona para Linux. Clique DOWNLOAD, copie o endereço da ligação que está no botão AGREE & DOWNLOAD (qualquer coisa parecida com http://us.download.nvidia.com/XFree86/Linux-x86/190.53/NVIDIA-Linux-x86-190.53-pkg1.run).

Abra um terminal e digite su para passar a root.

Digite apt-get install build-essential linux-headers-$(uname -r).

Digite cd /usr/src para passar o prompt para esta directoria.

Digite ln -s linux-headers-$(uname -r) linux para criar a ligação simbólica.

Digite wget e clique na tecla direita do rato para colar o link que copiou da página da NVIDIA (vai ficar como wget http://us.download.nvidia.com/XFree86/Linux-x86/190.53/NVIDIA-Linux-x86-190.53-pkg1.run).

Digite /etc/init.d/gdm stop isto irá parar o gdm e passa para o terminal. A partir deste ponto é conveniente que tenha este artigo impresso, pois vai ficar sem ambiente gráfico.

Agora que está na prompt do terminal digite cd /usr/src.

Seguidamente lance o script de instalação de NVIDIA digitando sh NVIDIA-Linux-x86-190.53-pkg1.run.

O instalador ao iniciar pede-lhe para aceitar o acordo da licença.

Responda NO à pergunta sobre a descarga do kernel da NVIDIA.

Clique OK para compilar um novo kernel.

Clique NO quando surgir a mensagem ‘… abort now’.

Deixe o instalador continuar e seleccione Yes para permitir a actualização automático do seu xorg.conf pelo nVidia-xconfig.

Clique OK e quando o instalador terminar, vai ficar novamente na prompt do terminal, digite então startx para iniciar o seu servidor X novamente.

Agora já pode modificar a resolução e outras definições avançadas da placa gráfica através do utilitário NVIDIA X Server Settings que está no menu das Ferramentas do sistema (System Tools).

Tags: , , ,

ASCII to UTF-8 Converter

ASC2UTF8 é um pequeno utilitário para converter alguns caracteres especiais de ASCII para UTF-8.

ASC 2 UTF-8 Converter

Ao preparar, com alguma frequência, textos para incluir em scripts php, surgiu a necessidade de escrever este utilitário em Gambas2.

Quando trabalhamos com duas ou mais línguas a ecoarem em ambientes de HTML, escrever caracteres especiais pode ser um desafio interessante. Utilizando a META tag <meta http-equiv=Content-Type content="text/html; charset=UTF-8"> e uma tabela de conversão UTF-8 pode ser uma boa solução (pelo menos comigo resultou). O utilitário ASC2UTF8 apenas converte alguns caracteres especiais, na realidade aqueles que me faziam falta converter. O código-fonte pode ser facilmente alterado para outros caracteres especiais.

Tags: , ,

Como instalar o OpenOffice 3.1 no Debian 5.0 Lenny

Por defeito o Debian Lenny traz o OpenOffice 2.6.4, entretanto o OpenOffice 3.1 foi lançado, para o instalar basta simplesmente seguir estes passos:

  • Adicione o repositório ‘backports’, como root edite /etc/apt/sources.list e acrescente a linha deb http://www.backports.org/debian lenny-backports main contrib non-free
  • Abra uma consola (como root)
  • Instale o ‘Debian backports keyring’ digitando apt-get install debian-backports-keyring
  • Actualize a lista de pacotes digitando apt-get update
  • Por fim instale o OpenOffice.org apt-get -t lenny-backports install openoffice.org

E pronto, está feito. O OpenOffice.org 3.1 está instalado e pronto a utilizar, digite ‘openoffice.org’ na consola ou utilize o menu ‘Aplicações’.

Tags: