Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: Tips and Tricks ~ Populando RA_CIC com CPFs Válidos via BTDN Shell

As vezes, para que os testes reflitam os problemas e/ou soluções reais, precisamos criar um ambiente o mais fiel possível.

cpf

Por exemplo: O Cadastro de Funcionários SRA com CPFs válidos.

Para isso poderemos usar a ferramenta u_cpf4sra.prg.

A idéia é achar tantos CPFs válidos quanto o número de registro da(s) tabelas SRAs que desejamos “popular”.

u_cpf4sra.prg depende da NDJLIB024 e NDJLIB001.

O código:

#include "ndj.ch"
/*
    Função:      U_CPF4SRA
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Funcao para Popular o SRA com CPFs Validos baseado no meu original U_SRACPF de 14/11/2009
    Sintaxe:     <Vide Parametros Formais>
    Parametros:  <Vide Parametros Formais>
    Uso:         Popular o SRA com CPFs Validos
*/
User Function CPF4SRA(ldbPack,lAllTables,cRDD)

    DEFAULT ldbPack     := .F.
    DEFAULT lAllTables  := .T.
    DEFAULT cRDD        := "TOPCONN"

    Private lAbortPrint := .F.

    SYMBOL_UNUSED( __cCRLF )

Return( Processa( { |lEnd| CPF4SRA(@ldbPack,@lAllTables,@cRDD) } , "Aguarde..." , "Carregando CPFs" , .T. ) )

/*
    Função:     CPF4SRA
    Autor:      Marinaldo de Jesus
    Data:       08/03/2012
    Descrição:  Funcao para Popular o SRA com CPFs Validos
    Sintaxe:    <Vide Parametros Formais>
    Parametros: <Vide Parametros Formais>
    Uso:        Popular o SRA com CPFs Validos
*/
Static Function CPF4SRA(ldbPack,lAllTables,cRDD)

    Local bGetCPF        := { || StaticCall( NDJLIB024 , NextCPF , cCPF , nCPFStart , nCPFFinish ) }

    Local cMsg
    Local cCPF           := "10656875917"
    Local cAlias
    Local cTable
    Local nLoop
    Local nLoops         := 990
    Local nRecCount      := 0
    Local nCPFStart      := 106568759
    Local nCPFFinish
    Local oError
    IF !( lAllTables )
        nLoops := 1
    EndIF

    TRYEXCEPTION

        ProcRegua( nLoops )
        For nLoop := 0 To nLoops STEP 10

            cTable  := "SRA" + StrZero( nLoop , 3 )
            cMsg    := ( cTable + " :: " + "Verificando Registros... " +  AllTrim( Str( Int( nLoop / nLoops * 100 ) ) ) + "%" )
            ChkAbort( .T. , cMsg )
            IF !( MsFile( cTable , NIL , cRDD ) )
                Loop
            EndIF
            cAlias  := GetNextAlias()
            IF !( MsOpenDbf(.T.,cRDD,cTable,cAlias,.F.,.F.,.T.,.F.) )
                Loop
            EndIF

            IF ( ldbPack )
                MyPack( @cAlias , @cTable )
            EndIF   

            nRecCount += (cAlias)->( RecCount() )

            (cAlias)->( dbCloseArea() )
        Next nLoop
        nCPFFinish    := ( nCPFStart + nRecCount )
        MsgRun( "Obtendo CPFS" , "Aguarde..." , bGetCPF )

        ProcRegua( nLoops )
        For nLoop := 0 To nLoops STEP 10

            cTable  := "SRA" + StrZero( nLoop , 3 )
            cMsg    := ( cTable + " :: " + "Atualizando CPF... " +  AllTrim( Str( Int( nLoop / nLoops * 100 ) ) ) + "%" )
            ChkAbort( .T. , cMsg )
            IF !( MsFile( cTable , NIL , cRDD ) )
                Loop
            EndIF
            cAlias    := GetNextAlias()
            IF !( MsOpenDbf(.T.,cRDD,cTable,cAlias,.F.,.F.,.T.,.F.) )
                Loop
            EndIF

            (cAlias)->( dbGoTop())

            While (cAlias)->( !Eof() )

                ChkAbort( .F. , cMsg )

                cCPF := Eval( bGetCPF )
                (cAlias)->RA_CIC := cCPF
                (cAlias)->( dbSkip())
            End While
            IF ( nLoop < nLoops )
                (cAlias)->( dbCloseArea() )
            EndIF   
        Next nLoop

    CATCHEXCEPTION USING oError
        Final( oError:Description )
    ENDEXCEPTION
Return( NIL )

/*
    Função:      ChkAbort
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Verifica se Deve Abortar o Processo
    Sintaxe:     <Vide Parametros Formais>
    Parametros:  <Vide Parametros Formais>
    Uso:         Popular o SRA com CPFs Validos
*/
Static Function ChkAbort( lProcessMessage , cMsgProc )

    DEFAULT lProcessMessage := .T.

    IF ( lProcessMessage )
        ProcessMessage()
    EndIF   

    IF ( lAbortPrint )
        lAbortPrint := MsgNoYes( OemToAnsi( "Deseja Abortar a Operação" ) , OemToAnsi( "Atenção" ) )
        IF ( lAbortPrint )
            UserException( cCancel )
        EndIF
    Else
        IncProc( cMsgProc )
    EndIF

Return( NIL )

/*
    Função:      MyPack
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Eliminar Registros Deletados
*/
Static Function MyPack( cAlias , cRetSqlName )
Return( StaticCall( NDJLIB001 , __dbDelete , @cAlias , .T. , @cRetSqlName ) )

Vou usar “BlackTDN Shell (*)” para executar o exemplo.

image

image

E, agora, consultando o resultado:

image

teremos:

image

(*) “BlackTDN Shell” na realidade é um trocadilho ( + para uma caixinha de surpresas ) é uma ferramenta útil criada por esse que vos escreve para “contornar” as limitações impostas pela TOTVS na execução de Fórmulas. Publicarei seu código no próximo post. Mas, adiantando. O que “BlackTDN Shell” pode nos oferecer?

Como no exemplo acima, a execução de “Query” sem a necessidade de acessar o SDU. A abertura de uma Tabela do sistema conforme abaixo:

image

image

Mostrar a senha de um usuário específico:

image

image

ou

image

Informações sobre determinado programa:

image

image

ou

image

Informações sobre as Variáveis em memória

image

image

Dentre outras.

Coming Soon: “BlackTDN Shell”

[]s

иαldσ dj

Comentários

Postar um comentário

Postagens mais visitadas