Eclipse P2
August 20, 2008 on 11:20 am | In java, open-source | No CommentsApenas uma nota muito rápida sobre a mais recente versão do Eclipse: Ganymede.
Uma das novidades é o novo sistema de actualizações de plugins e features, o P2. Vale a pena ler este artigo, sobretudo para quem desenvolve plugins para o dito.
EBCDIC String Sorting
August 14, 2008 on 3:12 pm | In java, ibm | 2 CommentsUma das muitas diferenças entre sistemas baseados em ASCII (ou qualquer dos seus super-sets) e os sistemas IBM - os mais tradicionais -, é que estes baseiam-se em EBCDIC, um sistema de codificação de caracteres de 8 bits que já vem do tempo dos cartões perfurados.
Essa herança tem uma consequência interessante: as letras do alfabeto não têm todas códigos consecutivos. Existe um intervalo entre a letra ‘I’ e a letra ‘J’, por exemplo. Outra característica interessante é que os códigos correspondentes aos dígitos 0-9 são maiores do que os códigos de todas as letras do alfabeto, enquanto que em ASCII acontece o oposto. Também os sinais de pontuação aparecem em posições relativas diferentes, assim como os caracteres acentuados.
Para referência, aqui ficam links para as duas tabelas: EBCDIC (codepage 037) e ASCII.
Em EBCDIC, a sequência efectiva de caracteres de acordo com o seu código numérico é a seguinte:
âäàáãåçñ¢.<(+|&éêëèíîïìß!$*);¬-/ÂÄÀÁÃÅÇѦ,%_>?øÉÊËÈÍÎÏÌ`:# \
@’=”Øabcdefghi«»ðýþ±°jklmnopqrªºæ¸Æ€µ~stuvwxyz¡¿ÐÝÞ®^£ \
¥·©§¶¼½¾[]¯¨´×{ABCDEFGHIôöòóõ}JKLMNOPQR¹ûüùúÿ\÷S \
TUVWXYZ²ÔÖÒÓÕ0123456789³ÛÜÙÚŸ
Interessante, não? Os caracteres acentuados aparecem nos “intervalos”da tabela original…
Mas de facto, do ponto de vista prático, a consequência mais importante desta diferença é a seguinte: Uma aplicação baseada, por exemplo, em AS/400 apresenta uma listagem ordenada de forma diferente de uma aplicação escrita em Java. Em ambientes de migração esta diferença pode ter consequências drásticas para utilizadores que, por exemplo, tiram partido de o underscore aparecer antes das letras do alfabeto, para dessa forma criarem elementos que aparecem sempre à cabeça de uma lista.
Uma forma de, para o bem ou para o mal, passar a ordenar Strings de acordo com a tabela EBCDIC é implementar um Comparator que use um RuleBasedCollator criado especificamente com a sequência de caracteres EBCDIC.
Por exemplo assim:
String ebcdic_rules = “< â < à < á < ã < ç < ñ < ‘.’ < ‘<’ < ‘(’ < ‘+’ < ‘|’ < ‘&’ < é < ê < è < í < î < ì < ‘!’ < ‘$’ < ‘*’ < ‘)’ < ‘;’ < ‘-’ < ‘/’ < Â < À < Á < Ã < Ç < Ñ < ‘,’ < ‘%’ < ‘_’ < ‘>’ < ‘?’ < É < Ê < È < Í < Î < Ì < ‘`’ < ‘:’ < ‘#’ < ‘@’ < ”’ < ‘=’ < ‘\”‘ < a < b < c < d < e < f < g < h < i < ‘«’ < ‘»’ < j < k < l < m < n < o < p < q < r < ª < º < ‘€’ < ‘~’ < s < t < u < v < w < x < y < z < ‘^’ < ‘£’ < ‘[’ < ‘]’ < ‘´’ < ‘{’ < A < B < C < D < E < F < G < H < I < ô < ò < ó < õ < ‘}’ < J < K < L < M < N < O < P < Q < R < û < ù < ú < ‘\\’ < S < T < U < V < W < X < Y < Z < Ô < Ò < Ó < Õ < 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < Û < Ù < Ú”;
Collator collator = new RuleBasedCollator(ebcdic_rules);
if(collator.compare(a, b) < 0){
//a is less than b according to EBCDIC sorting criteria
} else {
//a is equal or greater than b
}
© procself. Este blog está alojado no FEUP Blogs.
Crie também o seu blog.
Subscreva os Artigos (RSS)
e os Comentários (RSS) do procself.