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 :: Atualização de Dicionários e Tabelas de Dados

001 BlackTDN disponibiliza mais uma ferramenta para a atualização dos Dicionários e Tabela de Dados. U_NDJUPDDIC.PRG (depende de atualização dos arquivos da NDJLib).

A idéia básica é , a partir de um arquivo de configuração ndj_upd.ini, permitir a parametrização das tabelas e informações a serem atualizadas. Permite a “Simulação” e gera log ao final do Processo.

Exemplo de Configuração do arquivo ndj_upd.ini

[GENERAL]
adbConfig=SIX,SX1,SX2,SX3,SX6,SX7,SX9,SXA,SXB,SXG,SXM,SXO
adbTables=SX5
nApplyUpdate=1

[SX5]
bdbSourceName={||"\ndj_upd\sx5esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx5"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__cRDD}
cIndexKey=X5_FILIAL+X5_TABELA+X5_CHAVE
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SIX]
bdbSourceName={||"\ndj_upd\sixesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"six"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=INDICE+ORDEM
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SX1]
bdbSourceName={||"\ndj_upd\sx1esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx1"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X1_GRUPO+X1_ORDEM
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SX2]
bdbSourceName={||"\ndj_upd\sx2esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx2"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X2_CHAVE
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SX3]
bdbSourceName={||"\ndj_upd\sx3esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx3"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X3_ARQUIVO+X3_CAMPO
cIndexCond=
bEvalCond={||.T.}
cFieldDefUpdTable=X3_ARQUIVO;Obrigatorio para o SX3
aFieldsNotChange=
nSoftSeek=0

[SX6]
bdbSourceName={||"\ndj_upd\sx6esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx6"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X6_FIL+X6_VAR
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=X6_CONTEUD,X6_CONTSPA,X6_CONTENG
nSoftSeek=0

[SX7]
bdbSourceName={||"\ndj_upd\sx7esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx7"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X7_CAMPO+X7_SEQUENC
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SX9]
bdbSourceName={||"\ndj_upd\sx9esp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sx9"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=X9_DOM+X9_CDOM+X9_EXPDOM+X9_EXPCDOM
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=1;Obrigatorio para SX9

[SXA]
bdbSourceName={||"\ndj_upd\sxaesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sxa"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=XA_ALIAS+XA_ORDEM
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SXB]
bdbSourceName={||"\ndj_upd\sxbesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sxb"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=XB_ALIAS+XB_TIPO+XB_SEQ+XB_COLUNA
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SXG]
bdbSourceName={||"\ndj_upd\sxgesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sxg"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=XG_GRUPO
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SXM]
bdbSourceName={||"\ndj_upd\sxmesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sxm"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=XM_FILIAL+XM_CODIGO
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

[SXO]
bdbSourceName={||"\ndj_upd\sxoesp.dbf"}
brddSource={||"DBFCDXADS"}
bdbTargetName={||"sxo"+cEmpAnt+"0"+GetDbExtension()}
brddTarget={||__LocalDriver}
cIndexKey=XO_ALIAS+XO_CAMPO
cIndexCond=
bEvalCond={||.T.}
aFieldsNotChange=
nSoftSeek=0

Ex.: do Processo de Simulação

imageimage

image

image

image

image

image

image

image

Ex.: do Processo

image

image

image 

image

image

image

Obs.: Vale lembrar que qualquer rotina que altera estrutura de dados deve ser EXAUSTIVAMENTE testada antes de posta em prática.

[]s

иαldσ dj

Comentários

  1. Ta nas prioridades incluir a gravação dos Helps de Campo e Perguntas....(Issue List em Code Google)

    ResponderExcluir
  2. OK. Finalizado. Processo de Update atualizará também Help de Campos e Help de Perguntas....

    ResponderExcluir
  3. Naldo Dj, voce por acaso já integrou o Protheus com o AD do windows? se sim, vale a pena?

    ResponderExcluir
  4. Sim. Funciona. É tão simples de habilitar/desabilitar que, seria rendundancia minha, dizer se vale apena ou não.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas