Italian B4J : formattare una stringa

MARCO C.

Active Member
Licensed User
Longtime User
Buongiorno a tutti,
esiste una funziona tipo NumberFormat ma per le stringhe ?

Log(NumberFormat(12, 4 ,0)) '"0012"


Mi spiego meglio :
ho un elenco che devo stampare e vorrei formattare le varie ragioni sociale .. tutte con la stessa lunghezza.
Se la dimensiona massima della frase è = 30 ,
se la stringa è più lunga troncarla ,
se la stringa è più corta aggiungere spazi .

In extremis pensavo di tagliarlo con sf.Right puntato a 30
e aggiungere x spazi a destra ( x =30- len(frase))

Grazie

p.s.: Dim sf As JStringFunctions
 
Ciao marco
per ora mi viene in mente questa ma si può migliorare
Code:
Sub PaddingString(dato As String, padval As String, ds As Boolean, lungo As Int) As String
    Dim i As Int
    Dim str As String
    If dato = "" Or dato.Length >= lungo Then Return dato
    str = dato
    For i = 1 To lungo - dato.Length
        If ds = False Then
            str = padval & str
        Else
            str = str & padval
        End If
    Next
    Return str   
End Sub

ds se vuoi il padding a destra o sinistra
lungo quanto vuoi sia lunga la stringa
padval il valore che vuoi aggiungere per riempire la stringa
 
grazie Micro,

ho fatto solo una piccola modifica per tagliare "dato" se è maggiore di "lungo"

If dato = "" Then Return dato

If dato.Length >= lungo Then
dato=sf.Left(dato,lungo)
End If

Grazie
 
Mi sembra troppo complicato, io farei cosi
Code:
Sub FixString(Originale As String, Limit As Int) As String
    If Originale.Trim="" Then
        Return ""
    Else
        Dim Add As String = "          "
        Originale=Originale & Add & Add & Add & Add & Add & Add & Add & Add
        Return Originale.SubString2(0,Limit)
    End If
End Sub

oppure
Code:
Sub FixString(Originale As String, Limit As Int) As String
    If Originale.Trim="" Then
        Return ""
    Else
        Originale=Originale & "                                                  "
        Return Originale.SubString2(0,Limit)
    End If
End Sub
 
Ciao grande Star-Dust ma a volte, a prescindere da quello che chiedeva Marco il padding è richiesto anche con degli spazi, specie nelle stampe allineate.
Rispondevo solamente alle richieste specifiche di Marco, sicuramente in molti altri casi serve qualcosa di più complesso, ma a quel punto io farei cosi...
Code:
Sub FixString(Originale As String, padval As String, Limit As Int, ds As Boolean) As String
    If Originale.Trim="" Then
        Return ""
    Else
        Dim Add As String = "          ".Replace(" ",padval)
        Add=Add & Add & Add & Add & Add & Add & Add & Add
        If ds Then
            Originale=Originale & Add
            Return Originale.SubString2(0,Limit)
        Else
            Originale=Add  & Originale
            Return Originale.SubString(Originale.Length-Limit)
        End If
    End If
End Sub
oppure
Code:
Sub FixString(Originale As String, padval As String, Limit As Int, ds As Boolean) As String
    If Originale.Trim="" Then
        Return ""
    Else
        If ds Then 
            Originale=Originale & "                                                  ".Replace(" ",padval)
            Return Originale.SubString2(0,Limit)
        Else
            Originale="                                                  ".Replace(" ",padval) & Originale
            Return Originale.SubString(Originale.Length-Limit)
        End If
    End If
End Sub
 
Last edited:
Ma anche così :p
Code:
Sub FixString(Originale As String, padval As String, Limit As Int, ds As Boolean) As String
    Dim I As Int = 1
    If ds Then i=0
    If Originale.Trim="" Then
        Return ""
    Else
        Originale=Originale.SubString(I*Originale.Length) & "                                                  ".Replace(" ",padval) & Originale.SubString((1-I)*Originale.Length)
        Return Originale.SubString2((Originale.Length-Limit)*I,Limit+(Originale.Length-Limit)*I)
    End If
End Sub
Sono in vena creativa stasera
 
Back
Top