Italian B4J : formattare una stringa

MARCO C.

Active Member
Licensed 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
 

micro

Well-Known Member
Licensed User
Longtime User
Ciao marco
per ora mi viene in mente questa ma si può migliorare
B4X:
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
 

MARCO C.

Active Member
Licensed User
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
 

Star-Dust

Expert
Licensed User
Longtime User
Mi sembra troppo complicato, io farei cosi
B4X:
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
B4X:
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
 

Star-Dust

Expert
Licensed User
Longtime User
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...
B4X:
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
B4X:
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:

Star-Dust

Expert
Licensed User
Longtime User
Ma anche così :p
B4X:
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
 
Top