Bookmark and Share

Svårighetsgrad
Svårighetsgrad
Betyg (6 röster)
BetygBetygBetygBetygBetyg
 

Formatering av strängar

Inledning

Det spelar ingen roll hur avancerade utvecklingsverktyg man har, det underlättar alltid att kunna formatera sin data korrekt. Oberoende om du utvecklar program i WPF, Silverlight, WinForms eller ASP så kommer du att ha nytta av att kunna styra formateringen av data.

ToString()

Alla objekt i .NET har metoden ToString(). Denna metod används när ett objekt skall konverteras till text. Tillsammans med en del grundläggande metoder i klassen string börjar vi med ett kort exempel som grund.

Mycket av detta är ren repetition från artikeln stränghantering. Alla anrop till WriteLine() resulterar i samma utskrift.

På rad 16 bygger vi en sträng så som nybörjare oftast gör. Kompilatorn uppfattar det som +operation mellan strängar så variabler översätts automatiskt till text via ToString(). På rad 19 skriver vi ut igen fast denna gång med en formatsträng. WriteLine() kan användas direkt tillsammans med formatsträngar. {0} i strängen anger var första parametern efter formatsträngen skall in i utskriften. Detta är ett något "renare" sätt att styra utskrifter. Till sist, på rad 21, konstruerar vi en formaterad text på samma sätt som vi gjorde på rad 19. Skillnaden är att string.Format() används. Det är alltså så Console.WriteLine() fungerar på rad 19.

Denna artikel ska alltså göra en djupdykning i formateringen av strängar via string.Format() samt en beskrivning över hur de vanligaste datatyperna, t.ex. int, double, string och DateTime kan formateras via ToString(). Till sist också hur man kombinerar string.Format() och objektens ToString(). Jag lovar att du kommer ha nytta av detta inom alla inriktningar i .NET.

Formatering av DateTime

Datum och tider är oftast populära att formatera efter ett visst mönster. Vissa utskrifter är kulturellt beroende t.ex. "måndag" som på engelska/amerikanska skrivs ut som "Monday". Här följer en lång rad med exempel på formatering som kan användas på ToString() för DateTime. Resultaten (i kommentarerna) är på svenska.

Utöver dessa exempel på formatering så finns det även en lång rad med standardiserade format som har speciella kort-format tecken.

Tecken DateTimeFormatInfo property Mönster (för svensk kultur)
t ShortTimePattern HH:mm
d ShortDatePattern yyyy-MM-dd
T LongTimePattern HH:mm:ss
D LongDatePattern den d MMMM, yyyy
f (combination of D and t) den d MMMM, yyyy HH:mm
F FullDateTimePattern den d MMMM, yyyy HH:mm:ss
g (combination of d and t) yyyy-MM-dd HH:mm
G (combination of d and T) yyyy-MM-dd HH:mm:ss
m, M MonthDayPattern den d MMMM
y, Y YearMonthPattern MMMM yyyy
r, R RFC1123Pattern ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (*)
s SortableDateTimePattern yyyy'-'MM'-'dd'T'HH':'mm':'ss (*)
u UniversalSortableDateTimePattern yyyy'-'MM'-'dd HH':'mm':'ss'Z' (*)

(*) är kulturellt oberoende. Alla andra varianter är kulturellt beroende.

Formatering av Tal

Vi börjar med formateringen av double, float och Decimal. Det går t.ex. att bestämma hur många siffror som skall visas före eller efter decimaltecknet. Kod säger mer än ord, vi tittar på följande exempel:

Tidigare exempel har använt ToString() tillsammans med en formatsträng. Nu använder vi Console.WriteLine() med {0:format} där format är samma sträng som kan användas direkt med ToString(). Notera att vi får en automatisk avrundning om vi begränsar decimalerna via formatsträngen, 123.4567 blir 123.46 med endast två decimaler.

Vi kan även ta en till på hur decimaltal kring 0 kan formateras:

I det sista exemplet så kan formateringen styras in i tre olika delar; över 0, under 0 och exakt 0. Detta görs genom att ange ; i formatsträngen.

För heltal, int, gäller samma formatregler förutom att heltal givetvis inte har några decimaler. Vi kan ta några exempel med heltal också:

Anpassa texter

Via string.Format() eller Console.WriteLine() kan vi även styra höger/vänsterjustering vid formatering. På så vis kan vi enkelt skriva ut i prydliga kolumner.

Resultatet blir:

bild

På rad 12 definierar vi en formatsträng som anger höger- och vänsterjusteringar. {0,-10} betyder att parameter 0 skall fyllas på med mellanslag (höger om) så att bredden blir 10, dvs. vänsterjustering. {2,5} anger parameter 2 med högerjustering, bredd 5 tecken. Sen kan man diskutera om - känns logiskt för normal vänsterjustering.

Ett komplett exempel på en formatsträng syns på rad 21. Förutom en vänsterjustering på 20 tecken så anges även en formatsträng (g) som skall användas på parameter 0. Tillsammans blir det en kraftfull formatering.

Underskatta inte nyttan av formatering för du vet inte när du kommer att ha nytta av den. Inom .NET är det samma format som hela tiden återkommer, t.ex. i ett Console Application eller i samband med "Databinding" i WPF. Det är även så att viss formatering återfinns i produkter som Microsoft Excel.

Kommentarer

1 inlägg