Mappa del sito
Indice degli aggiornamenti  27/10/18
Metti formule tra i preferiti
Contattaci
Segnalaci ad un amico

Formule e argomenti di matematica, fisica e scienze
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.


Versione stampabile della scheda visualizzata sotto

Seguici in Facebook    Seguici in Pinterest    Seguici in X

Informatica : Code snippets (Strings)

Formattazione con riempimento a destra

A volte e' necessario (per reports, visualizzazioni incolonnate etc..) formattare una stringa in modo che la sua lunghezza sia fissa e non dettata dal contenuto corrente.
Per fare un esempio, si deve produrre un output su file producendo righe in cui le informazioni abbiano una lunghezza fissa, come questa:

 Nome (20 chars)     |citta (20 chars)
-----------------------------------------
Gianni--------------|Roma----------------
Alberto-------------|Milano--------------

Volendo appoggiare le stringhe a sinistra in uno 'spazio' di 20 caratteri, si ha bisogno di una funzione che, qualunque sia la lunghezza corrente della stringa, la porti al valore desiderato, aggiungendo a destra i caratteri necessari.

Nel codice sotto listato, implementiamo una funzione che svolga questo compito. La funzione riceve la stringa da 'formattare', la lunghezza L desiderata, e il carattere C di riempimento a destra. Ritornera' una stringa di lunghezza L, eventualmente 'completata' a destra da una sequenza di caratteri C. Chiamiamo questa funzione 'fillRight'.



Linguaggio: PASCAL

 
Parametri : s = stringa da formattare
: wdt = ampiezza richiesta
: cha = carattere di riempimento a destra
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 }
function fillRight(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); { ripuliamo la sringa a destra e sinistra}

IF Wdt>0 THEN BEGIN { se non e' vuota }

{ quanto manca ad arrivare a wdt ? }
Spazio:=Wdt-Len;

IF Spazio=0 THEN BEGIN
{ se non manaca niente non
facciamo niente }
END
ELSE IF Spazio<0 THEN BEGIN

{ se e' piu' lunga di quanto
richiesto prendiamo i primi
wdt caratteri }

S:=Copy(S,1,Wdt);

END
ELSE BEGIN

{ accodiamo il carattere 'CHA'
ripetuto 'Spazio' volte
per raggiungere una lunghezza
di wdt caratteri }

S:= S + Replicate(Cha,Spazio);


END;
END;
fillLeft := S; END;




Linguaggio: Assembler 80286

 
Parametri : s = stringa da formattare
: wdt = ampiezza richiesta
: cha = carattere di riempimento a destra
Ritorna : Il contenuto iniziale della stringa s
: seguita dal carattere 'cha'
: ripetuto tante volte, fino
: al raggiungimento della lunghezza 'wdt'
: N.B. Il codice e' scritto in forma
: di procedura, non di funzione,
: il parametro S e' passato 'per nome'
: (per reference).

Commenti : Questa versione assembler, e' scritta
: con le convenzioni
: usate nell'object pascal di Borland (c),
: per interfacciare
: codice Pascal con codice Assembler.
: N.B. In piu' presuppone che la stringa
: sia SHORT; max 255 caratteri
: e nel primo byte
: la lunghezza corrente
: della stringa stessa.
:

 
;PROCEDURE FillRight(VAR S:String; Wdt:integer; Cha:Char);
;
fillrS EQU DWORD PTR [BP+10]
fillrwdt EQU BYTE PTR [BP+8]
fillrCha EQU BYTE PTR [BP+6]
;
;
fillright PROC FAR
;
PUSH BP
MOV BP,SP
PUSH DS
;
;
;
LDS SI,fillrS
CLD
LODSB
MOV CL,AL
XOR CH,CH
CMP CL,fillrwdt
JB RIEMPI
; wdt > len accoda
JE FINE2 ; wdt=len lascia andare..
MOV AL,fillrwdt ; wdtlen=wdt
LES DI,fillrS
STOSB
JMP FINE2
RIEMPI: MOV AH,fillrwdt
SUB AH,AL
CLD
REP LODSB
PUSH DS
POP ES
PUSH SI
POP DI
MOV CL,AH
MOV AL,fillrCha
REP STOSB
LES DI,fillrS
MOV AL,fillrwdt
STOSB
FINE2: POP DS
MOV SP,BP
POP BP
RET 8
fillright ENDP


Linguaggio: C#

 
Parametri : s = stringa da formattare
: wdt = ampiezza richiesta
: cha = carattere di riempimento a destra
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' PadRight()
: Es.:
: string s = "gianni";
:
: s = s.PadRight(10,':');
:
: // s = "gianni::::::::::".
:
:-----------------
:
: Segue una implementazione di fillRight in C#
: Nella implementazione viene usata una
: funzioni gia' codificate, replicate()
: Replicate()
:

 
public string fillRight(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);

}
}

return (s);
}


N.B. Borland , DotNet e Microsoft sono marchi registrati ed appartengono ai leggittimi proprietari.



Made by Formule Development Team








  Metti la scheda negli appunti    Click per visualizzare il blocco appunti Visualizza appunti    Click x svuotare blocco appunti Azzera appunti



UTILITY
FormuLe-MATEMATICALC

TROVA FORMULE

UTILITY
FormuLe-FISICALC


TROVA FORMULE

UTILITY
FormuLe-STATISTICALC

UTILITY
Formule-MATFINCALC

ARGOMENTI
Matematica

Frattali di Mandelbrot
Benoit Mandelbrot e la Geometria Frattale. Introduzione e immagini.

Statistica e giochi

Lotto e superEnalotto
Una sintetica comparazione statistica e finanziaria dei due giochi.

Ultimo aggiornamento - Last update:  27/10/2018
Privacy and cookies
© www.gobnf.com 2008-2024 - Tutto il materiale contenuto nel sito PUO' essere liberamente usato per scopi personali (studio, creazione di relazioni e tesine etc). Non e' consentito qualsiasi altro tipo di utilizzo o riproduzione. - The entire content of this site may be freely used ONLY for personal purposes (study, creation of reports etc.). It is not allowed any other use or reproduction.