Páginas

lunes, 25 de mayo de 2015

Formatear cadenas de texto en VB.Net

Logo .Net   Trabajando mi con mi librería (Manuel's VB.Net Library) me percato de un pequeño pero gran problema: VB.Net no tiene una función muy clara para formatear cadenas de texto, en Visual Basic 6 era muy simple pero aquí no veo las cosas muy claras. Decidí implementar mi propia versión y he integrado la solución a mi librería.
  Como mencionaba, en VB 6 y versiones anteriores era muy simple, solo teníamos que usar la función Format de la siguiente manera:

Format(mystr, "$ ###, ###, ###.##")
La salida era la siguiente (asumiendo que el contenido de la variable mystr era 1000000): $ 1, 000, 000.00

  Así de simple era formatear monedas en VB clásico, pero en .Net no es tan sencillo, así que aquí les dejo una función que hace lo mismo, espero les guste, esta función ya se encuentra integrada a la librería Manuel's VB.Net Library, aunque no se ha lanzado al público me la pueden solicitar si lo desean, espero pronto la pueda liberar:

Actualización:
 
  Esta función experimentaba un error al formatear fechas, se han hechos las correcciones necesarias y ya trabaja correctamente.


Public Function FormatingString(stream As Object, mask As String) As String
    
      Dim finalstr As String, tmp As String, first As Long, second As Long, str1 As String, str2 As String
      Dim intstr As Integer, dblstr As Double, datestr As Date, strstr As String, length_ As Long
    
      Try
        
          If stream.IsNullOrEmpty(stream) = True Then
        
            Return ""
            Exit Function
        
        End If
    
      Catch exp As Exception
      End Try
    
      Try
        
          If mask.IsNullOrEmpty(mask) = True Then
        
            Return ""
            Exit Function
        
        End If
    
      Catch exp As Exception
      End Try
    
      Try
        
          If IsNumeric(stream) = True Then
            
              If stream.ToString().IndexOf(".") >= 0 Then
                
                  dblstr = stream.ToString().Trim
                  finalstr = dblstr.ToString(mask)
                
              Else
                
                  intstr = stream.ToString().Trim
                  finalstr = intstr.ToString(mask)
                
              End If
            
          ElseIf IsDate(stream) = True Then
            
              datestr = CDate(stream.ToString().Trim)
              finalstr = datestr.ToString(mask)
            
          Else
            
              strstr = stream.ToString
              finalstr = strstr
            
          End If
        
      Catch exp As Exception
          finalstr = stream
      End Try
    
      '##### PATCH INCORRECT DATE VALUE #####

      For i=1 To 10
        
          If finalstr.IsNullOrEmpty(finalstr) = False Then
            
              If finalstr.Trim().IndexOf("/00") >= 0 Or finalstr.Trim().StartsWith("00/") = True Then

                  tmp = stream.Trim

                  If finalstr.Trim().EndsWith("/00") = True Then
                    
                      first = 0
                      second = finalstr.Trim().IndexOf("/00")
                      length_ = finalstr.Trim().Length - (second + 1)
                    
                      finalstr = finalstr.Trim().Substring(first, second).Trim + "/" + tmp.Trim().Substring(tmp.Trim().Length - length_, length_).Trim
                    
                  ElseIf finalstr.Trim().IndexOf("/00/") >= 0 Then
                    
                      first = finalstr.Trim().IndexOf("/00/")
                      second = finalstr.Trim().Length - first
                    
                      str1 = finalstr.Trim().Substring(0, first).Trim
                    str2 = finalstr.Trim().Substring(second, finalstr.Trim().Length - second).Trim
                    finalstr = str1.Trim + "/" + tmp.Trim().Substring(first + 1, 2).Trim + "/" + str2.Trim
                
                  ElseIf finalstr.Trim().StartsWith("00/") = True Then
                      finalstr = tmp.Trim().Substring(0, 2).Trim + finalstr.Trim().Substring(2, finalstr.Trim().Length - 2).Trim
                  End If
                
              Else
                  Exit For
              End If
            
          End If
        
      Next
    
      '##### PATCH INCORRECT DATE VALUE #####
    
      Return finalstr
    
  End Function

¿Te gustó este post?, entonces si lo deseas puedes apoyarnos para continuar con nuestra labor, gracias.