FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Funcion de concatenar letras.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 01:11 PM

Hola a todos...
Estoy necesitando una funcion que concatene letras al estilo columnas de planilla excel.
Me explico mejor...
Por ejemplo necesito 200 combinaciones. (Solo entre A y Z y ordenadas de la siguiente manera)

A,B,C,D,....X,Y,Z,AA,AB,AC,AD,...AX,AY,AZ,BA,BB,BC,BD, etc, hasta completar la cantidad de combinaciones que elija. (En este caso 200)

¿Alguien ya tiene esta función armada?
Desde ya muchas gracias.

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 01:54 PM
Talbéz:

Code (fw): Select all Collapse
cNombre := ALLTRIM(SA1->NOMBRE)
 
MSGINFO(“Dados do campo NOMEBRE:”+CRLF
 
“Tamanho:” + CVALTOCHAR(LEN(SA1->NOMBREE))+CRLF
 
“Texto:” + CVALTOCHAR(LEN(cNombre)))

FUNCTION Concatena(Arg1)
 
   Local nConta := 0
 
   Local cLetra := ""
 
   Local cRet := ""
 
   Arg1 := Upper(Arg1)
 
   For nConta:= 1 To Len(Arg1)
 
      cLetra := SubStr(Arg1, nConta, 1)
 
      Do Case
      Case (Asc(cLetra) > 191 .and. Asc(cLetra) < 198) .or.;

         (Asc(cLetra) > 223 .and. Asc(cLetra) < 230)
 
         cLetra := "A"
 
      Case (Asc(cLetra) > 199 .and. Asc(cLetra) < 204) .or.;
 
         (Asc(cLetra) > 231 .and. Asc(cLetra) < 236)

         cLetra := "E"

      Case (Asc(cLetra) > 204 .and. Asc(cLetra) < 207) .or.;

         (Asc(cLetra) > 235 .and. Asc(cLetra) < 240)

         cLetra := "I"

      Case (Asc(cLetra) > 209 .and. Asc(cLetra) < 215) .or.;

         (Asc(cLetra) == 240) .or. (Asc(cLetra) > 241 .and. Asc(cLetra) < 247)

         cLetra := "O"

      Case (Asc(cLetra) > 216 .and. Asc(cLetra) < 221) .or.;

         (Asc(cLetra) > 248 .and. Asc(cLetra) < 253)
 
      cLetra := "U"

      Case Asc(cLetra) == 199 .or. Asc(cLetra) == 231
 
         cLetra := "C"
 
      EndCase
 
      cRet := cRet+cLetra
 
   Next
 
Return UPPER(cRet)
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 02:31 PM

Gracias por la respuesta...
Por lo que veo en tu función hace otra cosa.
No es lo que necesito.

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 02:35 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 02:44 PM

No,
Tampoco. Nada que ver con Excel, dije como las columnas del excel a modo de ejemplo.
Sería como contar con letras. (Con los caracteres desde 'A' a 'Z')

A,B,C,D,....X,Y,Z,AA,AB,AC,AD,...AX,AY,AZ,BA,BB,BC,BD, etc,

Poner por ejemplo:

aResultado:={}
FOR nCantidad=1 TO 200
cCadena := contar con letras
AADD(aResultado,cCadena)
NEXT

Y el resultado del array sería algo asi: {A,B,C,D,....X,Y,Z,AA,AB,AC,AD,...AX,AY,AZ,BA,BB,BC,BD, etc,}
Me expliqué mejor?

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 03:06 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 04:59 PM

Karinha,
Sigue sin ser lo que necesito. No se si me estoy explicando mal...
Saludos,

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 05:21 PM
Esteban, mira si es lo que necesitas. La he recién creado para agregarla a mi carpetas de ejemplos y pruebas:
Code (fw): Select all Collapse
//-----------------------//Obtener x combinaciones de letras
FUNCTION CombinaLetras()
local aLetras := {"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"}
local aCombinaciones := {}
local nCombinaciones := 200
local n:=0,n2,n3
local aLetCombi :={}

//AAdd(aCombinaciones,aLetras)

//En un array Multi-dimensional
For n2 := 1 to len(aLetras)
    aLetCombi :={}
    For n3 := 1 to len(aLetras)
        aadd( aLetCombi, aLetras[n2] + aLetras[n3] )
        if (n+=1) >= nCombinaciones
           exit
        endif 
    Next
    aadd( aCombinaciones, aLetCombi )

    if n >= nCombinaciones
       exit
    endif 
Next

xBrowse(aCombinaciones,"COMBINACIONES DE LETRAS")

//En un array uni-dimensional
aCombinaciones := {}   //  ó  aCombinaciones := aLetras, segun tu ejemplo
n:=0
For n2 := 1 to len(aLetras)
    For n3 := 1 to len(aLetras)
        aadd( aCombinaciones, aLetras[n2] + aLetras[n3] )
        if (n+=1) >= nCombinaciones
           exit
        endif 
    Next

    if n >= nCombinaciones
       exit
    endif 
Next

MsgInfo("Longitud: "+str(len(aCombinaciones))+CRLF+;
        "Ultima combinacion: "+Atail(aCombinaciones),"COMBINACIONES DE LETRAS - Array Uni-Dimensional")

Return nil

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 06:16 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 06:31 PM
Puedes probar este trozo de código tambien
Code (fw): Select all Collapse
#include "fivewin.ch"


Function Main()
Local nIni  := 65     //"A"
Local nFin  := 90     //"Z"
Local nVeces   := 806  // Nº de Combinaciones
Local x
Local aCombina   := {}
Local cResult    := ""

      aCombina := CombLetras( nIni, nFin, nVeces, aCombina, )

For x = 1 to Len( aCombina )
    cResult := cResult + aCombina[ x ] + " "
Next x
? Str( Len( aCombina ) ) + CRLF + cResult

// xbrowse( aCombina )
Return nil

Function CombLetras( nIni, nFin, nCombina, aCombina, nChars )
Local x     := 0
Local y     := 0
Local z     := nFin - nIni + 1
Local nPos  := 0
DEFAULT nChars   := 1

if empty( aCombina )
   For x = nIni to nFin
           AAdd( aCombina, Chr( x ) )
           if len( aCombina ) >= nCombina
              x := nFin + 1
           endif
   Next x
   if z < nCombina
      aCombina := CombLetras( nIni, nFin, nCombina, aCombina, nChars + 1 )
   endif
else
   nPos := Int( Len( aCombina ) / z ) 
   For x = nIni to nFin
       For y = nIni to nFin
           AAdd( aCombina, aCombina[ nPos ] + Chr( y ) )
           if len( aCombina ) >= nCombina
              y := nFin + 1
           endif
       Next y
       if len( aCombina ) >= nCombina
          x := nFin + 1
       endif
       nPos++
   Next x
   if Len( aCombina ) < nCombina
      aCombina := CombLetras( nIni, nFin, nCombina, aCombina, nChars + 1 )
   endif
endif
Return aCombina
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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 06:33 PM
Saludos

aqui tienes otro trozo de codigo

Code (fw): Select all Collapse
#define _INICIO_A 65
#define _FIN_Z 90
#define _TOTAL_LETRAS ( _FIN_Z - _INICIO_A + 1)

function main()

    local idx
    local aColumnas := {}
    local cTemp := ""
    local n
    for idx = 1 to 200
        n = idx % _TOTAL_LETRAS
        if idx > _TOTAL_LETRAS
            cTemp = aColumnas[ int( idx / _TOTAL_LETRAS ) ]
        end
        AADD( aColumnas, cTemp + Chr( _INICIO_A + ( If(  n == 0, _TOTAL_LETRAS, n ) ) - 1 ) )

    next

return nil
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 06:48 PM
Y un poco mas depurado

Code (fw): Select all Collapse
#include "fivewin.ch"


Function Main()
Local nIni  := 65     //"A"
Local nFin  := 90     //"Z"
Local nVeces   := 806  // Nº de Combinaciones
Local x
Local aCombina   := {}
Local cResult    := ""

      aCombina := CombLetras( nIni, nFin, nVeces, aCombina, )


For x = 1 to Len( aCombina )
    cResult := cResult + aCombina[ x ] + " "
Next x
? Str( Len( aCombina ) ) + CRLF + cResult

//  xbrowse( aCombina )
Return nil

Function CombLetras( nIni, nFin, nCombina, aCombina, nChars )
Local x     := 0
Local y     := 0
Local z     := nFin - nIni + 1
Local nPos  := 0
DEFAULT nChars   := 1

   nPos := Int( Len( aCombina ) / z ) 
   For x = nIni to nFin
       For y = nIni to nFin
           if nPos > 0
           AAdd( aCombina, aCombina[ nPos ] + Chr( y ) )
           else
           AAdd( aCombina, Chr( y ) )
           endif
           if len( aCombina ) >= nCombina
              y := nFin + 1
           endif
       Next y
       if len( aCombina ) >= nCombina
          x := nFin + 1
       endif
       nPos++
   Next x
   if Len( aCombina ) < nCombina
      aCombina := CombLetras( nIni, nFin, nCombina, aCombina, nChars + 1 )
   endif

Return aCombina
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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Funcion de concatenar letras.
Posted: Wed Apr 16, 2014 10:48 PM
Jugando un poco...
Code (fw): Select all Collapse
//-----------------------//Obtener x combinaciones de letras
FUNCTION CombinaLetras()
local aLetras := {"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"}
local aCombinaciones := {}
local nCombinaciones := 200, lFin
local n:=0,n2,n3
local aLetCombi :={}
local lIncLetBases := .f.
local nCombMaximas

if !MisGets("Combinacion de Letras",,"¿Cuantas combinaciones desea?",@nCombinaciones,"Lupa")
   Return nil
endif

if MsgYesNo("Incluir las letras bases? (A...Z)","Elija su opcion")
   lIncLetBases := .t.
   nCombMaximas := len(aLetras) + ( len(aLetras)*len(aLetras) ) 
else
   nCombMaximas := ( len(aLetras)*len(aLetras) ) 
endif

if nCombinaciones > nCombMaximas
   MsgStop( "Combinaciones maximas permitidas son: "+alltrim(str(nCombMaximas)) )
   return nil
endif

//Si queremos incluir las letras bases...
if lIncLetBases
   AAdd(aCombinaciones,aLetras)
   n := len(aLetras)
endif

//EN UN ARRAY MULTI-DIMENSIONAL
For n2 := 1 to len(aLetras)
    aLetCombi :={}
    For n3 := 1 to len(aLetras)
        aadd( aLetCombi, aLetras[n2] + aLetras[n3] )
        if (n+=1) >= nCombinaciones
           exit
        endif 
    Next
    aadd( aCombinaciones, aLetCombi )

    if n >= nCombinaciones
       exit
    endif 
Next
xBrowse(aCombinaciones,Str(nCombinaciones)+" COMBINACIONES DE LETRAS")


//EN UN ARRAY UNI-DIMENSIONAL
aCombinaciones := {}
n:=0
lFin:=.f.

//Si queremos incluir las letras bases...
if lIncLetBases
   For n := 1 to len(aLetras)
      aadd(aCombinaciones,{n,aLetras[n]})
   Next
   n:=len(aLetras)
endif

For n2 := 1 to len(aLetras)
    For n3 := 1 to len(aLetras)
        n+=1
        aadd( aCombinaciones, {n, aLetras[n2] + aLetras[n3]} )
        if n >= nCombinaciones
           lFin := .t.
           exit
        endif 
    Next

    if lFin
       exit
    endif 
Next
XBROWSE(aCombinaciones, Str(nCombinaciones)+" COMBINACIONES DE LETRAS")

Return nil
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Funcion de concatenar letras.
Posted: Thu Apr 17, 2014 11:20 AM

Bueno gente...
Muchas gracias a por sus respuestas.
Ya tengo como para jugar bastante!!
Saludos a todos,

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda

Continue the discussion