Copy com Pos

Delphi

14/07/2011

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
Pjava

Pjava

Curtidas 0

Respostas

Rodrigo Mattos

Rodrigo Mattos

14/07/2011

amigo, se os nomes dos arquivos sempre for desse tamanho você pode fazer assim:


  StringReplace(Copy(Nome do Arquivo,14,5),'-','',[rfReplaceAll]));



Espero ter Ajudado.

GOSTEI 0
Pjava

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

Alan Souza

14/07/2011

tenta assim
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

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
POSTAR