A ver, o no entiendo lo que quieres hacer o está muy complicado el método que usas.
Voy a partir de esto que pones en tu código:
Cita:
//String que quiero leer. que puede ser de dos o tres letras
//y de dos o cuatro pares de números:
// 've56-21.doc' o 'jun01-06-82-11.pdf'
|
y de las cadenas resultantes en el ejemplo que pusiste en tu primer mensaje.
La idea es:
1. Quitar la extensión
2. Separar la parte de las letras y la parte con la secuencia numérica.
3. Por cada número en la secuencia, formar una cadena compuesta por las letras y el número.
La primera parte es muy sencilla usando la función ChangeFileExt.
Para la segunda parte, si -como mencionas en el comentario- la cadena sólo puede contener dos o tres letras, entonces basta leer el tercer caracter para saber cuántas letras tenemos. Si es un número, quiere decir que sólo hay dos letras, y en caso contrario tres. Una vez determinado esto, es fácil separar las letras con la función Copy y, así mismo, la secuencia de números como 01-06-82-11.
Ahora bien, esta secuencia consiste de números separados por un guíon. Así que, para aislar cada número, viene muy práctico el uso de un TStringList y su propiedad DelimitedText.
Una vez que tengamos en una lista los distintos números, ya sólo es cosa de recorrer dicha lista y concatenar las letras con el número en turno.
Aquí pongo la expresión de mi idea:
Código Delphi
[-]
procedure SplitString(S: String; Strings: TStrings);
var
Letras: string; Cantidad: Integer; Numeros: TStringList; I: Integer;
begin
S := ChangeFileExt(S, '');
if ( S[3] in ['0'..'9'] ) then
Cantidad := 2
else
Cantidad := 3;
Letras := Copy(S, 1, Cantidad);
Numeros := TStringList.Create;
try
Numeros.Delimiter := '-';
Numeros.DelimitedText := Copy(S, Cantidad + 1, MaxInt);
for I := 0 to Numeros.Count - 1 do
Strings.Add(Letras + Numeros[i]);
finally
Numeros.Free;
end;
end;
La forma de usar este procedimiento sería así, por ejemplo, para poner las cadenas resultantes en un Memo:
Código Delphi
[-]
SplitString('jun01-06-82-11.pdf', Memo1.Lines);
// Saludos