Copy com Pos
Pessoal, tenho uns arquivos com formatos variáveis(quantidade de caracteres), tipo abaixo:
19991107-111-0500-NOT.tif
19991107-111-0560-CLASS.tif
20002501-5897-0001-AGRI.tif
20002201-0002-A200-NOT.tif Gostaria de criar um folder para cada arquivo, sendo que o nome do folder tera que possuir as strings que estão entre o Segundo e terceiro hífen("-"). Como faço isso? Que nesse caso seria: 0500 0560 0001 A200
19991107-111-0560-CLASS.tif
20002501-5897-0001-AGRI.tif
20002201-0002-A200-NOT.tif Gostaria de criar um folder para cada arquivo, sendo que o nome do folder tera que possuir as strings que estão entre o Segundo e terceiro hífen("-"). Como faço isso? Que nesse caso seria: 0500 0560 0001 A200
Pjava
Curtidas 0
Respostas
Rodrigo Mattos
14/07/2011
amigo, se os nomes dos arquivos sempre for desse tamanho você pode fazer assim:
Espero ter Ajudado.
StringReplace(Copy(Nome do Arquivo,14,5),'-','',[rfReplaceAll]));
Espero ter Ajudado.
GOSTEI 0
Pjava
14/07/2011
Como falei, não tem o mesmo nome, por isso o copy não funciona. Essa string é variável, conforme coloquei no exemplo. Gostaria de saber como fazer, quando temos tamanhos variáveis.
GOSTEI 0
Alan Souza
14/07/2011
tenta assim
sugestão de uso:
function RetornaPos(texto, caracter: String; posicao: Byte);var i, contagem: Byte;begin Result := 0; contagem := 0; for i := 0 to Length(texto) do begin if texto[i] = caracter then if posicao = contagem then begin Result := i; Break; end else Inc(contagem); end;end;
sugestão de uso:
procedure BotaoClick(Sender: TObject);var i: Integer; txt: String; begin with OpenDialog1 do begin Execute; for i := 0 to Files.Count -1 do begin txt := ExtractFileName(Files[i]); {aqui eu coloquei o ShowMessage só pra efeito de debug, mas vc pode capturar a string gerada e criar a pasta com CreateDir a partir dela} ShowMessage(Copy(txt,RetornaPos(txt,'-',1) + 1,(RetornaPos(txt,'-',2) - RetornaPos(txt,'-',1)) -1)); end; end;end;GOSTEI 0
Pjava
14/07/2011
Resolvi assim:
var TS: TStrings; begin TS:= TStringList.Create; try TS.Delimiter:= '-'; TS.DelimitedText:= NomArch; Result:= TS[3]; finally TS.Free; end; end;
GOSTEI 0