Classificando strings contendo números de uma maneira amigável

Estando acostumado com a maneira padrão de classificar strings, fiquei surpreso quando notei que o Windows classifica os arquivos pelos seus nomes de uma maneira avançada. Deixe-me lhe dar um exemplo:

Track1.mp3
Track2.mp3
Track10.mp3
Track20.mp3

Eu acho que esses nomes são comparados (durante a classificação) com base em letras e números separadamente.

Por outro lado, o seguinte é a mesma lista classificada de uma maneira padrão:
Track1.mp3
Track10.mp3
Track2.mp3
Track20.mp3

Eu gostaria de criar um algoritmo de comparação no Delphi que me permitisse classificar strings da mesma maneira. No começo eu pensei que seria o suficiente para comparar caracteres consecutivos de duas cordas enquanto eles são letras. Quando um dígito seria encontrado em alguma posição de ambas as seqüências, eu leria todos os dígitos seguindo-os para formar um número e, em seguida, comparar os números.

Para dar um exemplo, compararei as sequências "Track10" e "Track2" dessa maneira:
1) ler os caracteres enquanto eles são iguais e enquanto eles são letras: "Track", "Track"
2) se um dígito for encontrado, leia todos os dígitos seguintes: "10", "2"
2a) se eles forem iguais, vá para 1 ou então termine
Dez é maior que dois, então "Track10" é maior que "Track2"

Parecia que tudo ficaria bem até eu notar, durante meus testes, que o Windows considerava "Track010" menor que "Track10", enquanto eu pensava que o primeiro era maior como era maior (sem mencionar que, de acordo com meu algoritmo, as cordas seriam iguais, o que é errado).

Você poderia me dar a idéia de como exatamente o Windows ordena os arquivos por nomes ou talvez você tenha um algoritmo pronto para uso (em qualquer linguagem de programação) em que eu pudesse me basear?

Muito obrigado!
Mariusz

questionAnswers(3)

yourAnswerToTheQuestion