Spanish Hacer Left, Right, Mid y Split de Visual Basic en B4A (casi tutorial ;-) )

Discussion in 'Spanish Forum' started by bgsoft, Oct 11, 2013.

Similar threads

B4R Tutorial Strings and Bytes
B4R Code Snippet JSON Parsing
B4R Code Snippet Base64 decoding
B4A Code Snippet CSBuilder marking based on regex pattern
B4A Code Snippet [B4X] Bytes To File
  1. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola a todos:

    Despues de leer que a muchos que venimos de Visual Basic echamos a faltar algunos tratamientos de cadenas como son los tipicos Left, Right, Mid y Split, quiero compartir con vosotros una forma facil de hacerlo.
    Si lo poneis en un modulo y las haceis publicas lo podreis llamar desde cualquier sitio.

    Code:
    Sub Left(Text As String, Length As Int)As String
        
    If Length>Text.Length Then Length=Text.Length
        
    Return Text.SubString2(0, Length)
    End Sub

    Sub Right(Text As String, Length As Int) As String
        
    If Length>Text.Length Then Length=Text.Length
        
    Return Text.SubString(Text.Length-Length)
    End Sub

    Sub Mid(Text As String, Start As Int, Length As Int) As String
        
    Return Text.SubString2(Start-1,Start+Length-1)
    End Sub

    Sub Split(Text As String, Delimiter As StringAs String()
        
    Return Regex.Split(delimter,Text)
    End Sub
    Espero haber ayudado

    Saludos:
     
  2. klaus

    klaus Expert Licensed User

  3. bgsoft

    bgsoft Well-Known Member Licensed User

    No entiendo muy bien a que viene tu pregunta.

    Pero entiendo que hay gente que le resulta mas facil entender como manejaban las cadenas en Visual Basic que como se manejan en B4A, y de ahi a hacer este aporte.
    Solo pretendo facilitar la programación a los que entran en el mundo de B4A, no dominan el ingles (como yo) y como no existen tutoriales en castellano con ejemplos claros de como hacer cosas tan simples como Left, Right, etc, y despues de ver que hay gente que está interesada en esto, pues un Español con ganas de ayudar y compartir hace ese aporte.

    Saludos
     
    f0raster0 and jparraga like this.
  4. 23021959Pepe

    23021959Pepe Member Licensed User

    Jesús, Tienes más razón que un santo, no todos hemos nacido en la Gran Bretaña.

    Saludos
    Pepe
     
    hibrid0 likes this.
  5. leonardo pino

    leonardo pino Member Licensed User

    Si completamente de Acuerdo,
    muchas Gracias Jesús, gran aporte..
     
  6. Miguel de la Fuente

    Miguel de la Fuente New Member Licensed User

    Muchas gracias Jesús, saludos desde Mexico
     
  7. Zabatta

    Zabatta Member Licensed User

    Chicos disculpen, yo no he podido descomponer un texto en string según sus caracteres. Ni usando las funciones que indica bgsoft ni la librería que indica klaus, podrían ayudarme por favor?
     
  8. klaus

    klaus Expert Licensed User

    You should show us what you want to decompose!
    Today, I would no more suggest the StringFunctions library, I would even suggest to not use it, because it is no more supported.
     
    Zabatta likes this.
  9. Zabatta

    Zabatta Member Licensed User

    Creo que ya pude, realmente lo que quería era solo poder descomponer un string en sus caracteres, para luego reconstruir otro string pero asignándole un formato, esto con el propósito se que cuando el usuario ingrese un número de teléfono en un edittext por ejemplo:

    edt1.text = "123456789" al cambiar el focus, el texto no se vea 123456789 si no que se vea +56 1 2345 6789,

    también me sirve para eliminar símbolos por ejemplo

    edt1.text =" +56 123456789" lo convertiría a +56 1 2345 6789

    no se si pueda lograr eso, pero ya por lo menos pude descomponer un string en sus caracteres, lo cual es el primer paso. Lo hice de esta manera. Quizás no sea la mejor manera, la verdad es que no se mucho de programación, pero trato de aprender lo mas que pueda.

    Code:
    Sub Globals
        
    'These global variables will be redeclared each time the activity is created.
        'These variables can only be accessed from this module.
        Dim text As String
        
    Dim text2 As StringBuilder
        
    Dim sf As StringFunctions
        
    Dim t As Char
       
        
    Private Bt As Button
        
    Private edt1 As EditText
        
    Private lbl As Label
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        
    'Do not forget to load the layout file created with the visual designer. For example:
        Activity.LoadLayout("xx")
        
    'MsgboxAsync("Welcome to B4A!", "")
    End Sub

    Sub Activity_Resume

    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub

    Sub Bt_Click
        
    Dim n As Int
        n=
    1
        sf.Initialize
        text2.Initialize
       
        text=edt1.text

        
    For i=0 To text.Length
            t=sf.mid(text, n,
    1)
            
    Log(t)
            text2.Append(t)
            n=n+
    1
        
    Next
        
    Log(text2)
    End Sub
    uso la librería StringFunctions, no se de que otra manera se podría hacer. Gracias
     
  10. klaus

    klaus Expert Licensed User

    Everything in the in the String Functions library can be done with B4X standard functions, but a bit different.
    Examples:
    t = sf.mid(text, n,1) > t = text.CharAt(n) or t = text.Substring2(n, n +1)

    Your task is not that easy, because you need to define the different possibilities you may expect and then decompose depending on these possibilities.
    Examples:
    - check the + sign
    - check the number of characters
    etc.
     
    Zabatta likes this.
  11. Zabatta

    Zabatta Member Licensed User

    Muchísimas gracias klaus, creo que ya lo logre usando las instrucciones que me dijo, el edittext tendría que estar limitado solo a números y no a teléfonos, ya que este ultimo permite el ingreso de símbolos, a continuación dejo el programa. Se puede crear una lista de selección como un listView o un spinner (no se) donde el usuario seleccione el país, la cantidad de caracteres permitidos y el código de país, dependerán del país seleccionado. En el código siguiente use país como una variable con valor fijo "chile". sin embargo el numero telefónico tuve que mostrarlo por medio de un toast ya que creo que no se puede cambiar el contenido de texto de un edittext o al menos aun no se hacerlo, me sale error si coloco edt1.text=text2....


    Code:
    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'These variables can be accessed from all modules.

    End Sub

    Sub Globals
        
    'These global variables will be redeclared each time the activity is created.
        'These variables can only be accessed from this module.
        Dim text As String
        
    Dim text2 As StringBuilder
        
    Dim t As Char
       
        
    Private edt1 As EditText
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        
    'Do not forget to load the layout file created with the visual designer. For example:
        Activity.LoadLayout("xx")
        
    'MsgboxAsync("Welcome to B4A!", "")
    End Sub

    Sub Activity_Resume

    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub

    Sub edt1_FocusChanged (HasFocus As Boolean)
        
    'Declaracion de variables
        Dim n As Int
        
    Dim pais As String
        
    'Inicializacion de variables
        text2.Initialize
        pais=
    "chile"
        text=edt1.Text
        
    Log(text)
        n=
    0
       
        
    'logica de control
        For i=0 To text.Length-1
           
            t = text.substring2(n, n+
    1)
            
    Log("digito:" & t)
            
    Log("n:" & n)
            n=n+
    1
           
            
    If (pais="chile" And text.Length=9)Then
                
    If (text2.Length=0Then
                    text2.Append(
    "+56 "& t)
                
    Else If(text2.Length=5Then
                    text2.Append(
    " "& t)
                
    Else If (text2.Length=10Then
                    text2.Append(
    " "& t)
                
    Else
                    text2.Append(t)
                
    End If
    '        Else If (pais="venezuela" And text.Length=10)then
    '            If (text2.Length=0) Then
    '                text2.Append("+58 "& t)
    '            Else If(text2.Length=7) Then
    '                text2.Append(" "& t)
    '            Else If (text2.Length=11) Then
    '                text2.Append(" "& t)
    '            Else
    '                text2.Append(t)
    '            End If
            Else
                MsgboxAsync(
    "El número de telefono parece incorrecto.""Atención")
            
    End If
           
            
    Log(text2)
        
    Next
        
    'resultado
        ToastMessageShow(text2,True)
    End Sub
    Dejo el código por si alguien lo quiere probar, o le es útil y quiere mejorarlo.

    Muchísimas gracias Klaus :D
     
  12. klaus

    klaus Expert Licensed User

    Instead of edt1.Text = text2 try to use edt1.Text = text2.ToString
     
    Zabatta likes this.
  13. Zabatta

    Zabatta Member Licensed User

    :D tienes razon klaus text2 debe convertirse a string porque es un stringbuilder.... muchisimas gracias :D
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice