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