Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ordenar alfabeticamente numeros
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ordenar alfabeticamente numeros Responder citando

como puedo ordenar alfabeticamente un ListBox, bueno en realidad es uno de LMD de los que te dejan partir en paneles con un caracter delimitador(no me acuerdo de su nombre) pero bueno el ListBox es igual.

Mi pregunta es ordenarlo alfabeticamente de forma que si es
1
2
3
4
20

No me salga
1
2
20
3
4

Me salga como es .... me explico??
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Código:
    this->ListBox1->Sorted = true;


Si esta propiedad deriva, dentro del componente LMD tools, esta echo..
saludos.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Creo que con lo que sugiere César la tabla se mostraría como dice Fernando, ya que hace una evaluación de los códigos de los caracteres y no de los valores si estos son numéricos. Al poner Sorted a true un valor 20, 21, 22, etc. siempre irá delante del 3
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

exacto si e probado con el sorted pero por eso digo que no me vaya antes un 20 que un 3 tal y como pasa con el sorted

alguna idea?
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

La solución tradicional de trabajar con 01, 02, ... (ó 001, 002, ... si piensas que habrá más de 100 valores, o ...) ¿no te sirve?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola.

Yo lo que haría sería crear un vector auxiliar donde guardaría el valor numérico del item en cuestión. Luego los ordenaría con un algoritmo de ordenación (burbuja, quicksort, etc) y guardaría la posición previa del item. Por último, añadiría los items según el nuevo orden de la posición en el vector ordenado (no sé si me he explicado bien, espero que sí).

Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Lo voy a hacer como dice enrique Wink
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Pero .... al hacer una variable int =01 y hacerr luego el ++ o +=01 se me quita el 0

Confused
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hacer a una variable
Código:
int i = 01;
es lo mismo que asignarle un 1. Sin embargo no es lo mismo hacer
Código:
int i = 010;
que
Código:
int i = 10;
pues al escribir un 0 delante de un número entero tu compilador entenderá que le estas hablando en octal, osea si le dices que vale 010 le estás diciendo que su valor en decimal es 8. Ten cuidado con esos detalles.

Por otro lado, tu problema no está en que C no sepa ordenar los números enteros en su orden natural, el problema está en que lo que está ordenando son los caracteres de un AnsiString, por lo que 1xxxxx siempre será "menor" que 2.

Lo que necesitas es usar una función AnsiString de formato, en la que le digas cuántos dígitos ha de tener obligatoriamente el número que le pases:
Código:
AnsiString nombre;
int numero = 0;
nombre = FormatFloat("00", numero++);    // nombre = "00"
nombre = FormatFloat("00", numero++);    // nombre = "01"
nombre = FormatFloat("00", numero++);    // nombre = "02"
                                                               //...
nombre = FormatFloat("0000", numero++);    // nombre = "0003"
nombre = FormatFloat("0000", numero++);    // nombre = "0004"
                                                               //...
En la ayuda de BCB tienes más ejemplos de cómo formatear números expresándolos con caracteres.

Suerte.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

en vista, que no se puede, como se debiera, ya que las cadenas, son tratadas como ascci, bueno, lo ordenamos por burbuja, (fue el ordenamiento que se me ocurrio al momento)
pon esto en el codigo, y funciona

Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // bueno ordenalo por burjbuja, jeje
    AnsiString cTmp;
    for(int i=this->ListBox1->Items->Count;i>0;i--){
        for(int j=0 ; j < i-1 ; j++){
            if( (this->ListBox1->Items->Strings[j].ToInt()) > (this->ListBox1->Items->Strings[j+1].ToInt()) ){
                    cTmp = this->ListBox1->Items->Strings[j];
                    this->ListBox1->Items->Strings[j] = this->ListBox1->Items->Strings[j+1];
                    this->ListBox1->Items->Strings[j+1] = cTmp;
            }
        }
    }
}
//---------------------------------------------------------------------------

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Lo siento pero con el metodo de la burbuja me queda asi



1
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
3
4
5
6
7
8
9
2

he quitado el sorted y todo y se que da asi

Uso este codigo es = pero para el TLMDListBox
Código:
AnsiString cTmp;
    for(int i=this->tabla->Items->Count;i>0;i--){
        for(int j=0 ; j < i-1 ; j++){
            if( (this->tabla->ItemPart(j,1).ToDouble()) > (this->tabla->ItemPart(j+1,1).ToDouble()) ){
                    cTmp = this->tabla->Items->Strings[j];
                    this->tabla->Items->Strings[j] = this->tabla->Items->Strings[j+1];
                    this->tabla->Items->Strings[j+1] = cTmp;
            }
        }
    }

_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Algo Imposible, no puedo creer, que despues de comparar el 3 con el 10, en formato numerico, siga siendo el 3 mas grande que el 10, a mi me funciona perfectamente..
checa tu codigo.. por que no es posible..


saludos


aun que te dire, que veo diferencia, entre esto
Código:
if( (this->tabla->ItemPart(j,1).ToDouble()) > (this->tabla->ItemPart(j+1,1).ToDouble()) )


y esto
Código:
 
//                                        aqui con corchetes y tu con parentesis
if( (this->ListBox1->Items->Strings[j].ToInt()) > (this->ListBox1->Items->Strings[j+1].ToInt()) ){

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Yo lo que haria seria algo como lo que dice Cesar, es decir, comparar cada linea del ListBox utilizando StrToInt para comparar el valor numerico. No hay otra forma.
Volver arriba
Mensaje    Asunto: Responder citando

esque uso un TLMDListBox
Volver arriba
Mensaje    Asunto: Responder citando

Bien a ciencia cierta, es muy dificil, checarlo asi, por que no pones tu codigo para que todos observemos como lo estas ordenado y cual es el componente que utilizas..

saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.