Página 1 de 1
Versão clipper de cShortName()
Enviado: 14 Jan 2009 08:55
por sambomb
Alguém sabe me informar se tem alguma função em clipper que faz algo similar?
Ou ao menos me informar qual o limite de caracteres(se existe) para a função Run.
Gostaria de fazer isso:
Código: Selecionar todos
Procedure ImprimeUSB()
Local pcPath := ""
pcPath += "IMPRESSAO.EXE"
pcPath := AllTrim(pcPath)
pcPath := cShortName(pcPath)
if File(pcPath)
pcPath += " "+"IMPRESSAO"+"E"+AllTrim(pdir + "TEMP\" + "RELATORIO.TXT")
winexec(pcPath)
else
Alert("Não foi possivel encontrar o executável. "+pcPath)
end
No lugar do WinExec() sei que devo usar o Run &pcPath, mas e quanto ao cShortName() ?
Obs: cShortName() converte um caracter longo (se não me engano com mais de 10 caracteres) e transforma numa versão abreviada que é compreendida pelo Windows.
Ex.: ? "IMPRESSAO.EXE" //-- Retorna "IMPRESSAO.EXE"
? cShortName("IMPRESSAO.EXE") //-- Retorna "IMPR~O.EXE"(exemplo fictício)
Re: Versão clipper de cShortName()
Enviado: 14 Jan 2009 09:41
por Maligno
O nome curto de um arquivo (formato 8x3) que tem nome longo vai depender da gravação em disco. Exemplo: "nomelongodearquivo1.txt" e "nomelongodearquivo2.txt". Qual deles será "NOMELO~1.TXT"? Depende de qual deles foi gravado primeiro. Logo, não dá pra converter o nome simplesmente, com uma função. Você vai precisar pesquisar no diretório.
Acho que o melhor caminho é dar ao Clipper a possibilidade de tratar os nomes longos diretamente, como no Windows. Pra isso existe a biblioteca LFN. Tem pra download no meu
site.
Re: Versão clipper de cShortName()
Enviado: 14 Jan 2009 13:00
por Toledo
Outra solução, e mais simples, seria renomear o arquivo IMPRESSAO.EXE (formato 9.3) para IMPRESSA.EXE (formato 8.3).
Abraços,
Re: Versão clipper de cShortName()
Enviado: 23 Mar 2009 14:54
por Roberto de Carvalho
Pessoal, boa tarde !!!
Sou novato por aqui, e preciso da ajuda de vocês !!!!
Estou aprendendo a programar meio que na raça. Fiz um programa para receber arquivos TXT gerados em Windows, e normalmente o título do arquivo é imenso e o Clipper só aceita até 8 posições mais 3 da extensão. Preciso identificar o nome longo sei que existe uma solução porém não consegui implementar, como sou completamente desprovido de experiência gostaria de saber se tem alguém disposto a me ajudar a implantar a solução que já li em outros posts.
Em outras palavras preciso de uma "receita de bolo", alguém se habilita ?
Abraços,
Re: Versão clipper de cShortName()
Enviado: 23 Mar 2009 15:30
por sygecom
Bem vindo ao Fórum Roberto,
A lib NANFOR resolve esse seu problema, ela tem funções que trata esse problema. De uma procurada aqui no forum e pode baixar ela no site do Maligno:
http://pub.buzinello.com/xbase/clipper/ ... _v3.05.zip
Junto tem um NG que vai lhe ajudar a usar as funções da Nanfor.
Re: Versão clipper de cShortName()
Enviado: 23 Mar 2009 16:20
por Roberto de Carvalho
Olá Leonardo, tudo bem

Obrigado pela recepção e pela rápida resposta.
Eu já tentei isso, porém, possivelmente estou esquecendo de algo pois o programa não compila.
Como falei, ainda não entendo muito dessas chamadas de "#include", por isso preciso de um roteiro.
Desculpe pela inexperiência, mas, antes de recorrer a esse fórum, pesquisei bastante e quebrei a cabeça nesse sábado e domingo e não consegui nada.
Preciso saber onde colocar as LIBs, onde fazer as chamadas do include, enfim fazer pelo menos o programa funcionar.
Desculpe encher o saco de vocês, é que eu não consegui mesmo !!!
Abraços,
Re: Versão clipper de cShortName()
Enviado: 23 Mar 2009 16:22
por Roberto de Carvalho
Caro Leonardo, esqueci de mencionar que o meu Clipper é o 5.2.
Obrigado.
Versão clipper de cShortName()
Enviado: 23 Mar 2009 18:06
por Pablo César
Oi Roberto,
Vou tentar ajudá-lo.
Eu já tentei isso, porém, possivelmente estou esquecendo de algo pois o programa não compila.
Seu Clipper está funcionando bem ? Isto é, está compilando ? Se sim, ok prosigamos, senão diga o que acontece.
Como falei, ainda não entendo muito dessas chamadas de "#include", por isso preciso de um roteiro.
Quanto aos includes, é só colocar no seu PRG principal:
#include "LFNLIB.CH", mas também existe uma biblioteca chamada DBLFN.LIB que não precisa colocar INCLUDE algum. É só na hora de utilizar o BLINKER ou RTLINK. Quais deles você usa ?. Por exemplo com RTLINK, você colocaria a LIB junto desta maneira: RTLINK FI nome_do_programa_principal LIB DBLFN e pronto.
Preciso saber onde colocar as LIBs
Sugiro colocar todas as libs que servem para o Clipper na pasta LIB onde o Clipper está instalado (nmormalmente em:
C:\CLIPPER5\LIB)
Outra dica, você que está começando com Clipper, tome o hábito de utilizar o NG (Norton Guide) junto com seu editor para obter sintaxe e exemplos, é muito bom.
Obs.: fiz um exemplo teste (ja com a biblioteca) para você ver como é
Boa sorte !
Versão clipper de cShortName()
Enviado: 23 Mar 2009 18:38
por Pablo César
Existem duas bibliotecas para este fim:
A primeira que mencinei acima e que consigues no site da OASIS em:
http://www.the-oasis.net/files/library/dblfn005.zip esta biblioteca foi desenvolvida por Ian Day e que deixou pra trás.
E a segunda que está mais elaborada e que tem algumas vantagens que é de autoria de Klas Engwall e vocês encontram para download (com basta documentação) no site dele em:
http://www.engwall.com/clipper/lfnlib.htm e como o colega falou também encontra no site do Maligno.
Re: Versão clipper de cShortName()
Enviado: 24 Mar 2009 09:13
por Roberto de Carvalho
Prezado Pablo,
Bom dia !!!
Muito obrigado pela sua orientação, foram de extrema ajuda.
Os seus arquivos "receita de bolo", esclareceram as minhas dúvidas e finalmente consegui compilar o programa e faze-lo funcionar.
Infelizmente não consegui fazer as funções LF_COPY, LF_RENAME e LF_TOSHORT funcionarem, não sei o que acontece, segui todos os passos dos exemplos disponíveis no site e eles simplesmente não funcionam.
O LF_DIRECTORY(), foi suficiente para vizualizar o nome longo, como não consegui fazer as funções acima funcionarem, me utilizei de um recurso que até agora estou achando perigoso, criei outra tabela com o ADIR, onde trás o nome curto truncado, então entro pelo nome longo do LF_DIRECTORY E trabalho o nome curto da tabela criada pelo ADIR, os poucos testes que fiz ele está "pegando" o arquivo correto, será que estou correndo algum risco ?
Abraços e mais uma vez muito obrigado pela sua ajuda.
Versão clipper de cShortName()
Enviado: 24 Mar 2009 10:21
por Pablo César
Infelizmente não consegui fazer as funções LF_COPY, LF_RENAME e LF_TOSHORT funcionarem, não sei o que acontece, segui todos os passos dos exemplos disponíveis no site e eles simplesmente não funcionam.
Funcionam sim. Você está referindo-se a segunda opção mencionada na minha msg anterior que é a LFN.LIB e não a DBLFN.LIB, certo ?. Ok, veja que segundo instruções do arquivo NG diz que para usar o LF_FRENAME precisa do FT_int86() e do suporte de funções da Nanfor e CPMI. Portanto você vai precisar linkar essas bibliotecas também. Leia este esclarecimento no tópico: viewtopic.php?f=1&t=6180&p=47194&hilit=LF_TOSHORT#p47194
os poucos testes que fiz ele está "pegando" o arquivo correto, será que estou correndo algum risco ?
Como assim algum risco ? Se você acha que os nomes curtos poderão não equivaler... então faça uma verificação de existência desse arquiivo com o path completo. Eu acho que tem várias formas de fazer essa verificação
mas basicamente você pode pegar o path (de tamanho curto) junto com o nome do arquivo atarvés da função FILE(), assim:
Código: Selecionar todos
VDIR:=SHORT("C:\Arquivos de Programas\winzip") ==> retornará: "C:\ARQUIV~1\winzip
IF FILE(VDIR+"\WZ.COM")
? "O arquivo existe"
ELSE
? "O não arquivo existe"
ENDIF
Re: Versão clipper de cShortName()
Enviado: 24 Mar 2009 19:05
por Roberto de Carvalho
Caro Pablo,
Boa noite !!!
Show de bola, através da sua orientação consegui fazer o programa rodar, estou utilizando praticamente tudo, o programa ficou leve e funcionando muito bem.
Estou utilizando LF_DIRECTORY, LF_TOSHORT e LF_FRENAME, no início apanhei um pouco, mas, depois peguei o jeito, muito bacana, o Clipper tem muita lenha pra queimar. rsrsrsrs
Obrigado pela sua grande ajuda.
Abraços.