Albert Einstein: ... la nostra conoscenza, se paragonata alla realta' e' primitiva e infantile. Eppure e' il bene piu' grande che possediamo.
... all our science, measured against reality, is primitive and childlike-and yet it is the most precious thing we have.
Informatica : Code snippets (Strings)
Formattazione con riempimento a sinistra
Spesso si incontra la necessita' di formattare una stringa (per reports, liste incolonnate etc..) in modo che la sua lunghezza sia fissa e non quella dinamica corrente. Ad esempio, dobbiamo produrre un file composto da righe in cui le informazioni abbiano una lunghezza fissa, tipo questa:
Se le stringhe devono essere appoggiate a destra in uno 'spazio' di 20 caratteri, necessitiamo di una funzione che, qualunque sia la lunghezza corrente della stringa, la porti al valore desiderato, aggiungendo a sinistra i caratteri necessari.
Nel codice sotto, l'implementazione di una funzione atta a svolgere questo compito. La funzione riceve la stringa da 'formattare', la lunghezza L desiderata, e il carattere C di riempimento a sinistra. Ritornera' una stringa di lunghezza L, eventualmente 'riempita' a sinistra da una sequenza di caratteri C. Chiamiamo questa funzione 'fillLeft'.
Linguaggio: PASCAL
Parametri : s = stringa da formattare : wdt = ampiezza richiesta : cha = carattere di riempimento a sinistra Ritorna : Il contenuto iniziale della stringa s : seguita dal carattere 'cha' : ripetuto tante volte, fino : al raggiungimento della lunghezza 'wdt' Commenti : Nella implementazione vengono usate due : funzioni gia' codificate, Trim() e Replicate() : Trim() : Replicate()
{ Versione per short string (max 255 chars) e lunghezza corrente nel primo byte } PROCEDURE FillLeft(VAR S:String; Wdt:INTEGER; Cha:Char); VAR Spazio : INTEGER; len : Byte ABSOLUTE s; { absolute indica che la variabile len non viene 'allocata' , ma si sovrappone al byte in posizione 0 della stringa, quindi contiene la lunghezza della stringa stessa } BEGIN Trim(s); IF Wdt>0 THEN BEGIN Spazio:=Wdt-Len; IF Spazio=0 THEN BEGIN END ELSE IF Spazio<0 THEN S:=Copy(S,1,Wdt) ELSE S:=Replicate(Cha,Spazio)+S; END; END;
function FillLeft(S:String; Wdt:INTEGER; Cha:Char): String; VAR Spazio : INTEGER; len : Byte ABSOLUTE s; { absolute indica che la variabile len non viene 'allocata' , ma si sovrappone al byte in posizione 0 della stringa, quindi contiene la lunghezza della stringa stessa } BEGIN Trim(s); IF Wdt>0 THEN BEGIN Spazio:=Wdt-Len; IF Spazio=0 THEN BEGIN END ELSE IF Spazio<0 THEN S:=Copy(S,1,Wdt) ELSE S:=Replicate(Cha,Spazio)+S; END; FillLeft:=S; END;
Linguaggio: C#
Parametri : s = stringa da formattare : wdt = ampiezza richiesta : cha = carattere di riempimento a sinistra Ritorna : Il contenuto iniziale della stringa s : seguita dal carattere 'cha' : ripetuto tante volte, fino : al raggiungimento della lunghezza 'wdt' : Commenti : In C# (implementazione : Microsoft dotNet Framework (c) ) : esiste gia' un metodo della classe System.String : che implementa quanto richiesto. : Il nome del metodo e' PadLeft() : Es.: : string s = "gianni"; : : s = s.PadLeft(10,':'); : : s = "::::::::::gianni". : :----------------- : : Segue una implementazione di fillLeft in C# : Nella implementazione viene usata una : funzioni gia' codificata, replicate() : Replicate() :
public string fillLeft(string s, int wdt, char cha) {
int spazio = 0;
s = s.Trim();
if (wdt>0) {
spazio = wdt - s.Length;
if (spazio==0) { } else if (spazio<0) {
s = s.Substring(0,wdt);
} else {
s = replicate(cha,spazio)+s.Substring(0,wdt);
} }
return (s); }
N.B. DotNet e Microsoft sono marchi registrati ed appartengono ai leggittimi proprietari.
Metti la scheda negli appuntiVisualizza appuntiAzzera appunti