Página 1 de 2

PRG Converter Minúscula para Maiúscula

Enviado: 02 Jan 2008 17:03
por kristo
Boa tarde, estou aqui novamente abusando da vontade dos amigos.

Tenho um banco de dados onde o campo "NOME" "ENDERECO" e "CIDADE" os dados estão inseridos apenas com a inicial maiúscula eu precisava converter para todas as letras maiúscula, so que não tenho a mínima ideia de como fazer isso.
Ex.

"campo nome" Antonio Rodrigues = ANTONIO RODRIGUES
"campo cendereco" Rua Jose = RUA JOSE
"campo cidade" sao paulo/sp = SAO PAULO/SP

A DBF se chama "CADASSO" existe uma série de campos dentro dela, mais o que eu preciso realmente é apenas dos campos "NOME, ENDERECO, CIDADE, se possível é claro, caso contrário somente o campo "NOME" já estaria de bom tamanho.

Pesso desculpas aos moderadores pois não tive tempo de ler os tópicos me perdoem se já tiver um tópico parecido, mais estou extremamente enrolado com isso.

Um forte abraço a todos, fiquem com Deus.

Converte caracteres acentuados

Enviado: 02 Jan 2008 18:06
por Pablo César
Segue abaixo um exemplo (que fiz exclusivamente para você), este utilitário não converte somente as minúsculas como também todos os caracteres acentuados (inclusive C cedilha). Do contrário, bastaria fazer um replace com mediante a função UPPER do Clipper. Espero que ajude.

Enviado: 02 Jan 2008 18:48
por gvc
use cadasso

while !eof()

cadasso->nome := upper(nome)
cadasso->endereco := upper(endereco)
cadasso->cidade := upper(cidade)

dbskip()

end

// boa sorte

Enviado: 02 Jan 2008 18:55
por Pablo César
gvc essa sua indicação não iria garantir a conversão de caracteres acentuados nem o c cedilha, conforme eu tinha mencionado.

Enviado: 02 Jan 2008 23:36
por Maligno
Pablo César escreveu:

Código: Selecionar todos

          FOR U=1 TO VQTAM
              VSUB:=SUBSTR(VGET,U,1)
              VP:=ASCAN(CAR_OLD,VSUB)
              IF VP>0
                 VCAR:=CAR_NEW[VP]
                 VPOE:=.T.
              ELSE
                 VCAR:=VSUB
              ENDIF
              VTXT:=VTXT+VCAR
          NEXT
Se for realmente o caso de tratar os caracteres acentuados, eu trocaria essa parte pela função STRanslate(cSource,cTable1,cTable2), que foi feita em C puro e, portanto, é muito mais rápida. Talvez, dependendo do tamanho dos arquivos, um ganho de velocidade desses pode fazer uma grande diferença.

Paulo

Enviado: 03 Jan 2008 07:30
por kristo
Tento compilar sua PRG mais não estou tendo resultado, onde vc pede para colocar o nome da dbf e o nome do arquivo, poderia explicar pra mim, desculpe a minha falta de conhecimento, tento aprender fuçando mesmo, não tenho curso ou algo parecido, o básico que sei é porque eu gosto muito de clipper aprendi a gostar com um amigo que programava, mais nunca tive a oportunidade de aprender mesmo, e isso é uma coisa que em faz muita falta, mais um dia chego lá.
Forte abraço!!!

Quanto a outra PRG do nosso amigo deu certo, mais realmente os caracteres acentuados não são convertidos, mesmo assim agradeço a atenção de todos.

Fiquem em paz

Kristo

Enviado: 03 Jan 2008 09:27
por Maligno
Na linha de comando do DOS informe o nome do programa e, separado por espaço, o nome do DBF a converter.

Enviado: 03 Jan 2008 11:10
por ABeltrani
Bom dia amigos clippeiros !

Um ótimo 2008 a todos !


Com relação a duvida do amigo, é possível apenas com a função upper() converter todos os caracteres acentuados e o cedilha para maiusculo. Isso eu consegui utilizando o clipper 5.3b. Não sei se nas versões anteriores é possivel.

Clipper programa
Blinker fi programa, ntxpo850

Agora sim!!

Enviado: 03 Jan 2008 13:11
por kristo
Obrigado a todos, deu tudo certo graças a Deus e a vocês, valeu mesmo.

Kristo

Apenas uma observação!!

Enviado: 03 Jan 2008 13:30
por kristo
Mandei converter os caracteres e notei que eles estavam ficando todos juntos com a letra "A" no local dos espaços. ex:
JOÃO CARLOS = JOÃOACARLOS

Então como sou curioso notei algo que pensei ser ali a causa do problema ex:
na prg do nosso amigo estava assim:
CAR_OLD:={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"," ","‚","¡","¢","£","Æ","ä","ƒ","ˆ","Œ","“","–","…","Š","

Enviado: 03 Jan 2008 13:35
por ABeltrani
Boa tarde amigo Kristo !

Se vc usa o clipper 5.3, acho válido seguir meu exemplo, pois assim, vc utiliza uma função do proprio clipper, sem precisar escrever codigo algum.

Enviado: 03 Jan 2008 18:06
por Pablo César
Caro ABeltrani,

Você tem certeza que a utilização da função UPPER() do Clipper irá GARANTIR a conversão de caracteres acentuados como por exemplo "á", "é", "õ",etc... ?

Enviado: 03 Jan 2008 18:14
por Pablo César
Maligno escreveu:Se for realmente o caso de tratar os caracteres acentuados, eu trocaria essa parte pela função STRanslate(cSource,cTable1,cTable2), que foi feita em C puro e, portanto, é muito mais rápida.
Ainda mesmo sendo uma função feita em C puro, não acredito que venha a obter uma ganho muito considerável, pois o que deixa lento é a gravação do DBF com o REPLACE ou FIELDPUT (como eu mesmo utilizei) e não a procura e tradução de string ja que eu utilizei a função ASCAN que ora é extremamente rápida (na minha opinião mais rápida que outra função em C que possa se apresentar para este fim).

Bem mas esta é a minha opinião. Cabe fazer testes e medir... eu ja fiz meu teste com o meu exemplo. Só faltou comparar com o STRanslate(), mas como não me convence... então deixei de lado.

Enviado: 03 Jan 2008 19:03
por ABeltrani
Você tem certeza que a utilização da função UPPER() do Clipper irá GARANTIR a conversão de caracteres acentuados como por exemplo "á", "é", "õ",etc... ?
Certeza absoluta amigo Pablo. Mas como disse, tem que incluir o OBJ ntxpo850 que está na pasta OBJ do clipper. Sem o ntxpo850, realmente não converte estes caracteres. Pode testar se quiser.

Enviado: 03 Jan 2008 19:09
por ABeltrani
Inclusive, tem mais uma dica: Se incluir o OBJ MSGPO850 no blinker, as funções cdow() e cmonth() retornam dia e mes em Portugues.