Página 1 de 1

Nome de arquivo usando data

Enviado: 26 Mar 2007 22:55
por Marcio Antonio Ril
Amigos, boa noite

Preciso fazer um sistema de backup e quero usar o nome do sistema + a data, tipo assim:

sv250407.zip

tentei assim:

warquivo := "sv" + ctoc(date) + ".zip"

mais deu errado.

Será quem alguem tem alguma dica.


Obrigado.

MArcio Ril

Re: Nome de arquivo usando data

Enviado: 26 Mar 2007 23:57
por Maligno
Tente: warquivo := "sv"+ dtoc(date()) + ".zip"

Mas só terá o efeito desejado se set century for off e set date for british.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 27 Mar 2007 00:39
por vailton
Algo que ilustra a situação que uso aqui é:

Código: Selecionar todos

Data := date()
wArquivo := 'sv' +  alltrim(str(day( data ))) +;
                    alltrim(str(month( data ))) + ;
                    right(alltrim(str(year( data ))),2) + '.zip'
Isto gera o arquivo com o nome selecionado com base na data atual, independente das configurações de data vingente.

Enviado: 27 Mar 2007 01:12
por Maligno
Bom, se for assim, eu prefiro diferente: colocando no formato ANSI, que também independe dos SETs.

Código: Selecionar todos

warquivo := "sv" + Right(DtoS(Date()),6) + ".zip"
Assim, particularmente, acho melhor, pois os arquivos ficarão melhor ordenados numa eventual pesquisa pelo DOS.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 27 Mar 2007 09:47
por Eolo
Marcio,

Complementando, pra vc ter uma geral das funções:

a) o DTOC() ou Date TO Caracter, transforma uma data num string e depende do SET DATE e SET CENTURY. Exemplos:

hoje=date()
set date british
set century on
? dtoc(hoje) -> "27/03/2007" // ddmmaaaa
set century off
? dtoc(hoje) -> "27/03/07" // ddmmaa
set date american
? dtoc(hoje) -> "03/27/07" // mmddaa
set date german
? dtoc(hoje) -> "27.03.07" // ddmmaa

b) já o DTOS() ou Date TO String também transforma uma data em string, mas não depende do SET DATE ou SET CENTURY, voltando sempre 8 dígitos, na ordem ANOMESDIA:
set date british
set century off
? dtoc(hoje) -> "20070327" // aaaammdd


Como o Maligno ressaltou, se vc usar DTOC(), a ordem alfabética dos arquivos vai ficar bagunçada, porque a string "27/03/2007" é menor do que "28/03/2001"... Já com o DTOS(), vai aparecer primeiro "20010328" e depois "20070327", na ordem certa.

Eolo

Enviado: 27 Mar 2007 13:55
por gvc
vc tb pode fazer isto:
(com set century off)

hoje := date() // 26/03/07 (data)

data1 := dtoc(hoje) // string "26/03/07"

data2 := strtran(data1, '/', '') // string 260307

ou

data2 := strtran(dtoc(date()), '/', '') // string 260307

Mas a observação do Mestre Maligno vale. Para ordenar os arquivos, o correto é usar AAMMDD, ou no caso 070326.

Enviado: 27 Mar 2007 16:49
por vailton
Neste caso, concordo com o Maligno pois traz a vantagem da listagem de arquivos poder ser mais facilmente sorteada!

;)

Enviado: 27 Mar 2007 17:59
por Eolo
Marcio,

Outra sugestão: se vc usar o DTOS(), mesmo que tire os 2 primeiros caracteres, o string vai ficar "070327", sobrando então só mais 2 caracteres para completar o limite de 8 para nomes de arquivo no DOS.

Se, ao invés do resultante "SV070327.zip", você quiser ou precisar usar nomes mais extensos, além do limite citado, use a biblioteca LFN (Long File Names = Nomes Longos de Arquivo). Com ela, vc pode via Clipper nomear seus arquivos como no Windows, inclusive com espaços. Por exemplo: "Cliente Silva Viagens - Backup do dia 20070327")...

Eolo