Funcion de concatenar letras.

Funcion de concatenar letras.

Postby jrestojeda » Wed Apr 16, 2014 1: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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Funcion de concatenar letras.

Postby karinha » Wed Apr 16, 2014 1:54 pm

Talbéz:

Code: Select all  Expand view

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
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Funcion de concatenar letras.

Postby jrestojeda » Wed Apr 16, 2014 2: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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Funcion de concatenar letras.

Postby karinha » Wed Apr 16, 2014 2:35 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Funcion de concatenar letras.

Postby jrestojeda » Wed Apr 16, 2014 2: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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Funcion de concatenar letras.

Postby karinha » Wed Apr 16, 2014 3:06 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Funcion de concatenar letras.

Postby jrestojeda » Wed Apr 16, 2014 4: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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Funcion de concatenar letras.

Postby FranciscoA » Wed Apr 16, 2014 5:21 pm

Esteban, mira si es lo que necesitas. La he recién creado para agregarla a mi carpetas de ejemplos y pruebas:
Code: Select all  Expand view
//-----------------------//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
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Funcion de concatenar letras.

Postby karinha » Wed Apr 16, 2014 6:16 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Funcion de concatenar letras.

Postby cnavarro » Wed Apr 16, 2014 6:31 pm

Puedes probar este trozo de código tambien
Code: Select all  Expand view


#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
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Funcion de concatenar letras.

Postby Daniel Garcia-Gil » Wed Apr 16, 2014 6:33 pm

Saludos

aqui tienes otro trozo de codigo

Code: Select all  Expand view

#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

 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Funcion de concatenar letras.

Postby cnavarro » Wed Apr 16, 2014 6:48 pm

Y un poco mas depurado

Code: Select all  Expand view

#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
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Funcion de concatenar letras.

Postby FranciscoA » Wed Apr 16, 2014 10:48 pm

Jugando un poco...
Code: Select all  Expand view
//-----------------------//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
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Funcion de concatenar letras.

Postby jrestojeda » 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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 52 guests