Ir ao conteúdo
  • Cadastre-se

alterar descrição usando Pascal


Visitante: wesleyinfo

Posts recomendados

Visitante: wesleyinfo
 

Boa tarde pessoal!

Preciso de uma força pra fazer uma alteração na descrição de mais de 4.000 arquivos. Pois bem, esse é o nome de um dos arquivos:

_1274287083255201004+000121004515+0000000005776162-46630939.TIF

o que acontece, preciso somente dos números a partir do último "+", ou seja, o que vem antes não me interessa, devido a todos os arquivos terem o "+" na mesma posição, encontrei um software bem legal, chamado ReNamer, onde eu retiro tudo o que for antes dessa posição, agora temos um arquivo assim:

0000000005776162-46630939.TIF, ai começa de fato o meu problema.

Preciso inverter esse número, pegar o "46630939" e os últimos oito digitos antes do "-", "05776162", essa é a descrição do arquivo que preciso para gerar um hiperlink "4663093905776162".

Isso eu não consigo pelo ReNamer, porém ele tem um PascalScript embutido onde eu consigo programar o que preciso, mas já travei logo de cara, tentei algo mais ou menos assim:

begin

if filename like '%-%' then

end.

deu erro com like, como eu descreveria isso no Pascal?? depois disso colocaria que preciso concatenar o que vem depois do traço com os oito dígitos antes do traço.. é mais ou menos isso..

alguém help me!?!?

Valeu!

Link para o comentário
Compartilhar em outros sites

Wesley, eu desconheço uma função do tipo "like" no Pascal... pode existir, mas eu não me lembro.

Porém, no caso do problema específico que você apresentou, como você precisa fazer a troca de substrings que estão em posições ESPECÍFICAS no nome do arquivo, é melhor utilizar uma outra abordagem.

Imagine que a variável 'nome_arq' possui o nome do arquivo corrente que você precisa renomear.

Tente adaptar o seguinte código ao programa que você tem:

{Declaracao das variaveis}
i: byte;
parte1, parte2, nome_arq, novo_nome: string;

{EM ALGUMA PARTE DO SEU PROGRAMA...}
//Recebe a posicao numerica do '-' na string que tem o
//nome do arquivo.
i := pos('-',nome_arq);

//Copia os 8 caracteres antes do menos.
parte1 := copy(nome_arq, i-8, 8);

{Copia o que estiver depois do menos e antes do
ponto da extensao do nome do arquivo.
Estou assumindo que você quer uma parte de tamanho
fixo de 8 caracteres.}
parte2 := copy(nome_arq, i+1, 8);

//Cria um novo nome invertendo as duas partes
novo_nome := concat(parte2, parte1);

Em linhas gerais deve ser algo assim.

você ainda precisa ajustar esse código para ficar dentro do seu programa.

Link para o comentário
Compartilhar em outros sites

Visitante: wesleyinfo
 

Cara, sensacional!!!

Consegui inverter as posições do arquivo e deixar da forma que preciso..

O único problema é que, apesar de o arquivo sempre conter o mesmo número de caracteres, nem sempre o '-' vai estar na mesma posição, pode ter de 0 a 8 dígitos depois, dai vem a minha necessidade de um 'like'.. :confused:

mas posso usar um if para cada posição em que o '-' estiver, não!?

melhor mesmo seria se me mandassem o arquivo com o número certo.. :D

Mensagens unidas pela moderação. Não poste mensagens seguidas em menos de 24h. Utilize o botão Editar da mensagem anterior.

calma ai, já estamos atribuindo a posição do hífen..

i := pos('-',filename);

vou fazer o teste nas outras descrições..

Cara, sensacional!!!

Consegui inverter as posições do arquivo e deixar da forma que preciso..

O único problema é que, apesar de o arquivo sempre conter o mesmo número de caracteres, nem sempre o '-' vai estar na mesma posição, pode ter de 0 a 8 dígitos depois, dai vem a minha necessidade de um 'like'.. :confused:

mas posso usar um if para cada posição em que o '-' estiver, não!?

melhor mesmo seria se me mandassem o arquivo com o número certo.. :D

Link para o comentário
Compartilhar em outros sites

Bom, já que a posição do hífem é variável, podemos fazer a seguinte generalização da parte do código que captura o que vem depois do hífem.

{Declaracao das variaveis}
i: byte;
parte1, parte2, nome_arq, novo_nome: string;

{EM ALGUMA PARTE DO SEU PROGRAMA...}
//Recebe a posicao numerica do '-' na string que tem o
//nome do arquivo.
i := pos('-',nome_arq);

//Copia os 8 caracteres antes do menos.
parte1 := copy(nome_arq, i-8, 8);

j := pos('.', nome_arq);

{Copia o que estiver depois do menos e antes do
ponto da extensao do nome do arquivo.}
if j>(i+1) then
{Se tiver pelo menos 1 caracter entre o hifem e o ponto}
parte2 := copy(nome_arq, i+1, (j - i - 1));

else //Não tem nada entre o hifem e o ponto.
parte2 := ''; {Coloca uma string vazia na 2ª parte}

//Cria um novo nome invertendo as duas partes
novo_nome := concat(parte2, parte1);

Dá uma testada para ver se dá certo.

Link para o comentário
Compartilhar em outros sites

Visitante: wesleyinfo
 

Identifiquei mais algumas condições que devem ser colocadas no programa, na verdade a descrição deve ficar dessa forma: 20100446630905776162. O nome se inicia com o ano e mês do arquivo, depois vem acompanhado de 14 digitos.

Pois bem, identifiquei que a parte1 pode conter em alguns casos 9 dígitos, caso isso aconteça deve ser considerado os 8 caracteres a esquerda, da forma que fiz resolveu meu problema, minha preocupação é que nos próximos venha mais de 9, ai vou precisar fazer um for ou while, como tinha urgência pra concluir, não fiz ainda, mas vou tentar fazer isso e depois mando.

Quando a parte2 conter mais de 6 dígitos preciso desconsiderar os dois últimos.

Fiz um for para incluir o 0 a esquerda quando não possuir os 14 caracteres.

Me baseei no que você me passou e inclui essas novas condições, no ReNamer preciso deixar a variável com o mesmo nome, ficou assim:

//{Declaracao das variaveis}

var
i, x, p, tam : byte;
parte1, parte2, pos1, traco : string;

begin

//Recebe a posicao numerica do '-' na string
i := pos('-',filename);

//Recebe a posicao numerica do '.' na string
p := pos('.',filename);

//Recebe a string que contem na variavel i
traco := copy(filename,i,1);

//verifica se nao contem traco e grava a string
//com as 14 posições

if traco <> '-' then
filename := copy(filename, p-14,14)

else

//atribui parte1 com 9 posições
parte1 := copy(filename, i-9, 9);

//verifica qual caracter na primeira posicao da parte1
pos1 := copy(parte1, 1,1);

//se nao for zero atribui as oito primeiras posições da parte1
//'desonsiderando a ultima'
if pos1 <> '0' then
parte1 := copy(filename, i-9, 8)

//atribui parte1 com 8 caracteres
else
parte1 := copy(filename, i-8, 8);

//posições da parte2 entre o traco e o ponto
parte2 := copy(filename, i+1, (p-i)-1);

//numero de caracteres na parte2
tam := length (parte2);

//se maior que 6 considerar primeiras 6 posições
if tam > 6 then
parte2 := copy(parte2, 1,6);

//verifica se contem traço e faz a inversao das partes
if traco = '-' then
filename := parte2 + parte1;

//verifica tamanho do nome
tam:= length(filename);

//preenche com 0 a esquerda se menor que 14
For x := tam to 13 do
filename := '0' + filename;

//preenche com ano e mes no inicio do nome e extensao no final
filename := '201004' + filename + '.TIF';

end.

Link para o comentário
Compartilhar em outros sites

O problema que você tem que resolver tem várias condicionantes, Wesley, mas o importante é que você já tem conhecimento de todas as funções do Pascal necessárias para resolvê-lo.

Eu só não entendi este teste que você faz aqui:

if traco <> '-' then
filename := copy(filename, p-14,14)

No meu entendimento este teste sempre retornará falso, uma vez que você atribuiu o hifem à variável traço:

//Recebe a string que contem na variavel i
traco := copy(filename,i,1);

Link para o comentário
Compartilhar em outros sites

Visitante: wesleyinfo
 

Na verdade tenho casos em que não tem o hifen, nesse caso a descrição já vem da forma que preciso, só seleciono os 14 caracteres.

O que achei estranho é que se eu não colocasse a condição abaixo no final para trazer o nome, ele não trazia corretamente os casos em que não contem hifen.

//verifica se contem traço e faz a inversao das partes                
if traco = '-' then
filename := parte2 + parte1;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!