Ordenacion Mayúsculas/Minúsculas

Post Reply
JoseLuis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Ordenacion Mayúsculas/Minúsculas

Post by JoseLuis »

Buenas

Hago un índice así:

Code: Select all | Expand

index on &(AnsiUpper("PROVE->Calle")) tag &("Calle")

o así

Code: Select all | Expand

index on &(Upper("PROVE->Calle")) tag &("Calle")

o así

Code: Select all | Expand

index on PROVE->Calle tag &("Calle")


y siempre me ordena la calle poniéndome primero las mayúsculas y luego las minúsculas.

Hay alguna forma de indexar que de igual que sea mayúscula o minúscula, es decir, que las vaya intercalando?

Saludos
--------------------------
Saludos

Jose Luis
JoseLuis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Ordenacion Mayúsculas/Minúsculas

Post by JoseLuis »

Sigo sin resolverlo

Y ésto, creo que me afecta a que cuando hago una búsqueda, si la hago con Upper(string), solo me presenta las grabadas en mayúsculas, y si no, sólo las minúsculas.

Tiene esto algo que ver con lo expresado anteriormente?.

He puesto al principio del programa:

REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN
HB_LangSelect("ES")
HB_SetCodePage("ESWIN")

y nada, sigue igual

Un saludo
--------------------------
Saludos

Jose Luis
User avatar
karinha
Posts: 7942
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Ordenacion Mayúsculas/Minúsculas

Post by karinha »

Muestra como usted hace la búsqueda via fuente porfa.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
JoseLuis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Ordenacion Mayúsculas/Minúsculas

Post by JoseLuis »

El campo es Calle, y me pone primero las mayusculas

esta es la imagen del wbrowse

Imagewbrowse by Jose Luis Garcia


en el browse:

Code: Select all | Expand

oLbx:bKeyChar := { | nKey, nFlags | ;
              iif (nKey == 43 .or. nKey == 65 .or. nKey == 97,;
                          (entreg(cTitulo,"A",aAlias,aoDbf), oLbx:Refresh()), ),;
              iif (nKey == 76 .or. nKey == 108,;
                          (Busca(aAlias[21],oLbx,oTab,tQbusco), oLbx:Refresh()), ),;
          iif (nKey == 66 .or. nKey == 98,;
                          (Borra1(aAlias),oLbx:UpStable(), oLbx:Refresh()), ),;
              iif (nKey == 77 .or. nKey == 109,  ;
                          (entreg(cTitulo,"M",aAlias,aoDbf),oLbx:Refresh() ), ) }


Funcion busca:

Code: Select all | Expand

//----------------------------------------------------------------------------//

function Busca(cAlias,oLbx,oTab,tQbusco,BusRaiz)
************************************************
local oDlg,aAlias
local oBusco,oboton
local oCbx,osay
local cBusco, cIndi
local nClave
local aIndi:={}
local nReg:=(cAlias)->(Recno())
DEFAULT BusRaiz:=""
aeval( tQbusco[3] , { |LX| aadd(aIndi,strtran(LX,"&")) } )
  DEFINE DIALOG oDlg RESOURCE "LOCALIZA2" BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
  REDEFINE SAY osay ID 10 OF oDlg COLOR CLR_GREEN
  REDEFINE GET oBusco VAR cBusco  ID 100 OF oDlg ;
       ON CHANGE ( nClave:=( cAlias )->(recno()),;
              ::Assign(),;
              iif( (cAlias)->(dbseek(Upper( Substr(cBusco, 1,::nPos -1)))), .T. ,;
                   ( (cAlias)->( dbGoto ( Recno() )), .f.) ),oLbx:Refresh(),;
                  iif (Chr(nKey)=13,oDlg:End(),.T.))
  REDEFINE COMBOBOX oCbx VAR aIndi[oTab:nOption] ITEMS aIndi ID 101 OF oDlg ;
           ON CHANGE (oTab:nOption:=oCbx:nAt,oTab:refresh(),;
        cBusco:=tQbusco[2,oCbx:nAt], ;
        (cAlias)->(OrdSetFocus(tQbusco[1,oCbx:nAt])),oLbx:Refresh(),;
        oBusco:Refresh(), oBusco:setFocus(), oDlg:Update() )
  REDEFINE BUTTON oboton ID 102 OF oDlg PROMPT "Aceptar" ;
                ACTION oDlg:End() CANCEL

  ACTIVATE DIALOG oDlg CENTERED ON INIT Tget():lClrFocus:=.T.
  if Busraiz='C' .or. Busraiz='S'
  cbusco:=alltrim(cbusco)
  obusco:blostfocus := {||oDlg:End()}
  else
  cBusco:=tQbusco[2,oTab:nOption]
  cIndi :=aIndi[oTab:nOption]      
  endif
return cbusco
//------------------------------------------------
 


Un saludo
--------------------------
Saludos

Jose Luis
User avatar
karinha
Posts: 7942
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Ordenacion Mayúsculas/Minúsculas

Post by karinha »

SET EXACT está ON?

Cambia el ON CHANGE para una FUNCTION, creo sea mejor para el controle.

Mira también el comando ASCAN()

y

Code: Select all | Expand


    ISLOWER()
    ISUPPER()
 


http://harbour.edu.pl/clipper/en/C53G01C/ng34b.html

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
Posts: 7942
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Ordenacion Mayúsculas/Minúsculas

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
JoseLuis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Ordenacion Mayúsculas/Minúsculas

Post by JoseLuis »

Muchas gracias Joao.

Lo miro y te comento

Un saludo
--------------------------
Saludos

Jose Luis
User avatar
cnavarro
Posts: 6558
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Ordenacion Mayúsculas/Minúsculas

Post by cnavarro »

Por favor, indica qué versión de Fivewin y (x)Harbour utilizas ( por ejemplo en tu firma ), así será más fácil comentar tus posts.

Es posible que no tenga nada que ver, pero por si acaso, te comento lo siguiente:

- Pantalla: al seleccionar en Harbour el codepage ESWIN, estás indicando a Harbour qué caracteres ha de utilizar y haga todas las "traducciones", y seguro que en eso no tienes problema.
- Base de datos: es posible que debas seleccionar la página de códigos correcta en la que se almacenan los datos y en la que quieres utilizar los datos, para permitir que Harbour haga su trabajo correctamente. Echa un vistazo al tutorial de Alexander (http://www.kresin.ru/en/hrbfaq.html#_Doc5) y mira cómo puede seleccionar un CODEPAGE en el comando USE o en la función dbUseArea ().
- Ten también en cuenta que hay varios codepages disponibles para español, por lo que puedes probarlos a ver los resultados que obtienes, así nos informas a todos de tu experiencia ( no olvides volver a generar tus indices cada vez que cambies el codepage, claro ):
    ES850 Español (Moderno) CP-850
    ES850C Español CP-850 ( ntx spa.obj compatible)
    ES850M Español CP-850 ( mdx spa.obj compatible)
    ESISO Español (Moderno) ISO-8859-1
    ESMWIN Español (Moderno) ISO-8859-1
    ESWIN Español (Moderno) Windows-1252

Además, puedes investigar cómo se setea globalmente los codepages que queremos utilicen nuestras bases de datos, para no tener que modificar tu código al tener que implementar el codepage en el comando USE y/o en la function DbUseArea:
(Esta es una forma de hacerlo)
Set( _SET_DBCODEPAGE, <codepage del que se ha realizado previamente un REQUEST> )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
gsabattino
Posts: 102
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Re: Ordenacion Mayúsculas/Minúsculas

Post by gsabattino »

no veo la necesidad de usar macros en la creación de los indices:

index on Upper( PROVE->Calle ) tag Calle


Saludos,
JoseLuis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Ordenacion Mayúsculas/Minúsculas

Post by JoseLuis »

Buenas

Joao, he visto que en tu browse ocurre lo mismo:


Imagejoao by Jose Luis Garcia, en Flickr

No obstante, tienes una rutina de busqueda, que me va a servir de mucho, muchas gracias.

Con respecto a la version de fwh que utilizo, en concreto ésta aplicación está generada con la de abril del 2011 y con Verce.

Dispongo de otras FTDN posteriores, pero he intentado, por ejemplo con alguna del 2015, ya que en esta fecha veo que hubo modificacion importante de xbrowse y no soy capaz de compilar, me da muchos errores, y es que utilizo muchas librerias externas y de ahí vienen los errores, y dispongo de poco tiempo para ponerme con este tema.

Muchas gracias por las respuestas
--------------------------
Saludos

Jose Luis
User avatar
karinha
Posts: 7942
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Ordenacion Mayúsculas/Minúsculas

Post by karinha »

Una idea,

Code: Select all | Expand


FUNCTION MAISCULA()

   PARAMETERS VDBF

   IF VDBF = NIL

      ? "Informe o nome do DBF"

      QUIT

   ELSE

      IF !( "." $ VDBF )
         VDBF := VDBF + ".DBF"
      ENDIF

      IF !FILE( VDBF )
         ? "Arquivo " + VDBF
         QUIT
      ENDIF

   ENDIF

   SELE 1
   USE ( VDBF )

   IF !FILE( "DBF.OLD" )
      COPY TO "DBF.OLD"
   ENDIF

   VQCAM := FCOUNT()

   CAR_OLD := { "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", " ", "‚", "¡", "¢", "£", "Æ", "ä", "ƒ", "ˆ", "Œ", "“", "–", "…", "Š", "", "•", "—", "„", "‰", "‹", "”", "", "‡", "¤", "µ", "", "Ö", "à", "é", "Ç", "å", "¶", "Ò", "×", "â", "ê", "·", "Ô", "Þ", "ã", "ë", "Ž", "Ó", "Ø", "™", "š", "€", "¥" }

   CAR_NEW := { "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", "E", "I", "O", "U", "A", "O", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "€", "¥", "A", "E", "I", "O", "U", "A", "O", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "A", "E", "I", "O", "U", "€", "¥" }

   DO WHILE ( 1->( !EOF() ) )

      FOR I = 1 TO VQCAM

         VGET := FIELDGET( I )

         IF VALTYPE( VGET ) = "C"

            VQTAM := LEN( ALLTRIM( VGET ) )
            VPOE := .F.
            VTXT := ""

            FOR U = 1 TO VQTAM

               VSUB := SUBSTR( VGET, U, 1 )
               VP := ASCAN( CAR_OLD, VSUB )

               IF VP > 0
                  VCAR := CAR_NEW[VP]
                  VPOE := .T.
               ELSE
                  VCAR := VSUB
               ENDIF
               VTXT := VTXT + VCAR
            NEXT

            IF VPOE = .T.
               FIELDPUT( I, VTXT )
            ENDIF

         ENDIF

      NEXT

      SKIP

   ENDDO
   /*
   WIN_CAR_LOW:='áéíóúãõâêîôûàèìòùäëïöüçñ'
   WIN_CAR_HIG:='ÁÉÍÓÚÃÕÂÊÎÔÛÀÈÌÒÙÄËÏÖÜÇÑ'

   DOS_CAR_LOW:=' ‚¡¢£Æ䃈Œ“–…Š•—„‰‹”‡¤'
   DOS_CAR_HIG:='µÖàéÇå¶Ò×âê·ÔÞãëŽÓØ™š€¥'
   */


RETURN NIL
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Post Reply