Versão clipper de cShortName()

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Versão clipper de cShortName()

Mensagem 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)
Imagem

Rca Sistemas - Itaocara - RJ
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Versão clipper de cShortName()

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Versão clipper de cShortName()

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Roberto de Carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 23 Mar 2009 14:37
Localização: São Paulo - SP

Re: Versão clipper de cShortName()

Mensagem 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,
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Versão clipper de cShortName()

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Roberto de Carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 23 Mar 2009 14:37
Localização: São Paulo - SP

Re: Versão clipper de cShortName()

Mensagem 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,
Roberto de Carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 23 Mar 2009 14:37
Localização: São Paulo - SP

Re: Versão clipper de cShortName()

Mensagem por Roberto de Carvalho »

Caro Leonardo, esqueci de mencionar que o meu Clipper é o 5.2.
Obrigado.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Versão clipper de cShortName()

Mensagem 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 !
Anexos
teste.zip
(80.53 KiB) Baixado 232 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Versão clipper de cShortName()

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Roberto de Carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 23 Mar 2009 14:37
Localização: São Paulo - SP

Re: Versão clipper de cShortName()

Mensagem 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.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Versão clipper de cShortName()

Mensagem 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
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Roberto de Carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 23 Mar 2009 14:37
Localização: São Paulo - SP

Re: Versão clipper de cShortName()

Mensagem 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.
Responder