Visual Basic - Cortar texto sin violar leyes de la gramática

Life is soft - evento anual de software empresarial
 
Vista:

Cortar texto sin violar leyes de la gramática

Publicado por Manuel (60 intervenciones) el 01/07/2006 21:28:16
Hola, bueno no se si me explique en el titulo, pero el problema que tengo es que estoy haciendo un sistema para generar facturas y cuando escribo el monto en palabras, sobrepasa el ancho de la factura, y me gustaría cortar el texto pero que no me corte en cualquier parte, me explico con un ejemplo:

El texto de ejemplo es el siguiente:

Ciento cincuenta y cinco millones trescientos ochenta y nueve mil ciento cuarenta pesos.

Quiero que lo corte así:

Ciento cincuenta y cinco millones trescientos_
ochenta y nueve mil ciento cuarenta pesos.

y que NO quede así:

Ciento cincuenta y cinco millones trescient
os ochenta y nueve mil ciento cuarenta pesos.

Porque seria fácil contar un para de caracteres y decirle que lo corte ahí, pero violaríamos leyes de la gramática en mas de una oportunidad.
No importa que no lo corte en un silaba pero por lo menos que llegue a un numero determinado de caracteres y si encuentra texto a los costado que empiece a buscar el espacio mas cercano para recién cortar.

Me explique, ojala que si.
Por la ayuda muuuchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cortar texto sin violar leyes de la gramática

Publicado por Matías Leonardo Freire (421 intervenciones) el 03/07/2006 18:18:53
Manuel.... Acá te dejo esta función que hice hace un tiempo atrás precisamente para solucionar el problema que comentás.

Espero que te sirva saludos!!!!


Private Function AjustarTexto(ByVal Cadena As String, ByVal MaxCaracteres As Integer) As String
Dim i As Integer
Dim sLinea As String
Dim aPalabras() As String
Dim aLineas() As String

ReDim aLineas(1) As String

Cadena = Replace(Cadena, vbCrLf, " ", 1, -1, vbTextCompare)

aPalabras = Split(Cadena, " ", -1, vbTextCompare)

For i = LBound(aPalabras) To UBound(aPalabras)
Select Case Len(sLinea) + Len(aPalabras(i))
Case Is < MaxCaracteres
sLinea = sLinea & aPalabras(i) & " "

Case Is = MaxCaracteres
sLinea = sLinea & aPalabras(i) & vbCrLf

ReDim Preserve aLineas(UBound(aLineas) + 1) As String
aLineas(UBound(aLineas)) = sLinea
sLinea = ""

Case Is > MaxCaracteres
sLinea = sLinea & vbCrLf & aPalabras(i) & " "

ReDim Preserve aLineas(UBound(aLineas) + 1) As String
aLineas(UBound(aLineas)) = sLinea
sLinea = ""
End Select
Next i

If sLinea <> "" Then
ReDim Preserve aLineas(UBound(aLineas) + 1) As String
aLineas(UBound(aLineas)) = sLinea
End If

For i = LBound(aLineas) To UBound(aLineas)
AjustarTexto = AjustarTexto & aLineas(i)
Next i
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar