Lepi izpisi s String.Format

Lepi izpisi s String.Format

Avtor: Vera Kabanova

Sintaksa

Format je metoda razreda String. Bistvo te metode je možnost tvorbe nekega niza iz nekaj komponent z določenim formatiranjem. Kot sestavine grajenega niza lahko nastopajo nizi, različni formati števil, datumi in enumeracije.

SINTAKSA:
String.Format("niz",arg1,arg2,...)

  • "niz"...niz, v katerega bomo vstavili vrednosti. Ta niz vsebuje informacije o lokaciji posameznih sestavin v nizu podane v zavitih oklepajih. Položaji zavitih oklepajev samih določajo položaje komponent niza. Številke v teh oklepajih pa so indeksi teh komponent. Indeksiranje se začne z 0.
  • arg1, arg2...so spremenljivke, vrednosti katerih bomo formatirali in vstavili v niz "niz".

PRIMER:

(primer1.jpg)

Formatiranje polja

V zavitih oklepajih lahko poleg indeksa komponente navedemo še način formatiranja polja. Ta dva podatka ločimo z vejico. Tu gre predvsem za poravnavo. Če hočemo zapis poravnati v desno, v zavite oklepaje za vejico zapišemo koliko znakov naj bo dolgo dano polje. Tako bo vrednost vstavljene komponente zapisana desno v polje, pred njo se pa doda še toloko presledkov, kolikor manjka do podane dolžine polja. Podobno storimo, če hočemo zapis poravnati levo, le da številko dolžine polja podamo z negativnim predznakom.

PRIMERI:

(primer2.jpg)


Če je zapis vrednosti argumenta, ki ga želimo vstaviti v niz, daljši od nastavljene dolžine polje, se le-ta preprosto ne upošteva.

(primer3.jpg)

Formatiranje števil - standardni načini

Obstajajo standardni in nastavljivi načini formatiranja števil. Standardni načini so neke vnaprej določene šablone, ki so označene z črkami. Argumentom torej lahko določimo tipe formatiranja v obliki črk - za razliko od formatiranja polj, podatka ločimo z dvopičjem. Določitelju formata(črki) lahko dodamo tudi številko, ki določi natančnost - kako bomo število zaokrožili. Če številko zamolčimo, se vsak tip formata obnaša po svoje. Pri teh primerih ne delamo razlik med določitelji formata podanimi z malimi ali velikimi črkami.
MOŽNOSTI:

  • {0:c} - pretvori število v valuto. To določilo podpirajo vsi tipi števil. Če natančnosti formata ne nastavimo, se ta določi v skladu z razredom NumberFormatInfo. Ta format ne izpiše negativnega predznaka pred števili. Če hočemo negativni predznak, si moramo pomagati z nastavljivimi načini formatiranja.
    Primeri:

    (primer4.jpg)
  • {0:d} - desetiška oblika števila. Deluje le na spremenljivkah podatkovnega tipa int. Če s tem določilom probamo formatirati spremenljivko podatkovnega tipa double, se sproži System.FormatException. Če natančnosti ne določimo, se število izpiše takšno kot je. Če natančnost določimo na več števk kot je število dolgo, se pred stevkami števila izpišejo ničle.
    Primeri:

    (primer5.jpg)
  • {0:e} - eksponencialna notacija.To določilo podpirajo vsi tipi števil. Če natančnosti formata ne nastavimo, se bo število izpisalo s šestimi števkami za decimalno vejico.
    Primeri:

    (primer6.jpg)
  • {0:f} - oblika števila z fiksirano vejico oz. piko. Zapiše število v obliki z decimalno vejico. Če natančnosti formata ne nastavimo, se ta avtomatočno določi v skladu z razredom NumberFormatInfo.To določilo podpirajo vsi tipi števil.
    Primeri:

    (primer7.jpg)
  • {0:g} - splošni način formatiranja. Obnaša se isto, kot če določila sploh ne navedemo. Za števila tipa double za najbolj kompakten zapis med e-notacijo in obliko z fiksirano vejico. Število tipa int se izpiše tako kot je brez vejice ali e-notacije. To določilo podpirajo vsi tipi števil.
    Primeri:

    (primer8.jpg)
  • {0:n} - oblika number - zapis z decimano vejico in pikami, ki ločujejo tisočice - oz. zapis z decimano piko in vejicami, ki ločujejo tisočice (odvisno od jezika). To določilo podpirajo vsi tipi števil. Če natančnosti formata ne nastavimo, se ta določi v skladu z razredom NumberFormatInfo.
    Primeri:

    (primer9.jpg)
  • {0:p} - procentni zapis. Gre za število pomnoženo s sto in z dodanim simbolom %. Število samo je izpisano v formatu number. To določilo podpirajo vsi tipi števil. Če natančnosti formata ne nastavimo, se ta določi v skladu z razredom NumberFormatInfo.
    Primeri:

    (primer10.jpg)
  • {0:r} - t.i. "round-trip" format. Gre za pretvorbo števila v niz na tak način, da bo obratna pretvorba vrnila isto število. Vsakršnokoli določilo natančnosti se ignorira.Deluje le na spremenljivkah podatkovnega tipa single,double in BidInteger. Če s tem določilom probamo formatirati spremenljivko podatkovnega tipa int, se sproži System.FormatException.
    Primeri:

    (primer11.jpg)
  • {0:x} - šestnajstiški zapis. Podpirajo ga le celoštevilski tipi spremenljivk. Če s tem določilom probamo formatirati spremenljivko podatkovnega tipa double, se sproži System.FormatException. Če natančnost določimo na več števk kot je zapis dolg, se pred zapisom izpišejo ničle.
    Primeri:

    (primer12.jpg)

Formatiranje števil - nastavljivi načini

Pri tah načinih v zavite oklepaje za indeks argumenta zapišemo svojo šablono formata števila, ki jo tvorimo iz posebnih prav za to rezerviranih znakov ter običnih znakov. Če pred posebnim znakom zapišemo znak "\", se poseben znak v izpisu pokaže kot običen znak in ne kot poseben. Če hočemo v zapisu imeti dele nizov, jih je priporočljivo obdati z enojnimi narekovaji. Posebni znaki:

  • "0" - nadomestitelj ničle - zamenja ničlo z ustrezno števko, če le-ta obstaja, v nasprotnem primeru na tem mestu ostane ničla.
  • "#" - nadomestitelj števke - zamenja znak z ustrezno števko, če le-ta obstaja, v nasprotnem primeru bo to mesto prazno.
  • "." - razdelitelj - dolči položaj razdelitve celega in decimalnega dela zapisa.
  • "," - znak za ločevanje tisočic oz. spreminjanje vrednosti števil v merilu. Če na koncu šablone stoji en ali več znakov ",", formatirano število delimo s 1000 tolikokret, kolikor je teh zankov.
  • "%" - nadomestitelj procenta - formatirano število pomnoži s 100 in mu doda simbol za procente, ki je vezan na lokacijo.
  • "‰" - nadomestitelj promila - formatirano število pomnoži z 1000 in mu doda simbol za promile, ki je vezan na lokacijo.
  • "E", "E+", "E-", "e", "e+", "e-" - eksponencialna notacija (tem simbolom mora slediti vsaj ena ničla).
  • ";" - razdeljitelj sekcij - šablono razdeli na sekcije, v katerih prikažemo načine formatiranja za pozitivna, negativna števila in ničlo. Če imamo dve sekcije, se prva nanaša na nenegativna števila, druga pa na negativna. Če imamo tri sekcije, se prva nanaša na pozitivna števila, druga na negativna števila, tretja pa na 0.

Iz naslednjih primerov je razvidno delovanje teh načinov formatiranja:

(primer13.jpg)

Formatiranje datumov - standardni načini

Formatiranje datumov in časa je odvisno od regionalnih nastavitev na racunalniku. Tako kot pri številih imamo tudi pri datumih standardne in nastavljive načine formatiranja. In prav tako so določitelji formata pri standardnem formatiranju podani z črkami. Za razliko od formatiranja števil pri formatiranju datumov ločimo določitelje podane z velikimi ali malimi črkami.
Določitelji:

  • "d" - krajši zapis datuma.
  • "D" - daljši zapis datuma.
  • "t" - krajši zapis časa.
  • "T" - daljši zapis časa.
  • "f" - zapis datuma in časa, ki vsebuje daljši zapis datuma in krajši zapis časa.
  • "F" - zapis datuma in časa, ki vsebuje daljši zapis datuma in daljši zapis časa.
    Primeri:

    (primer14.jpg)
  • "g" - splošni zapis datuma in časa - oba v krajši obliki.
  • "G" - zapis datuma in časa, ki vsebuje krajši zapis datuma in daljši zapis časa.
    Primeri:

    (primer15.jpg)

    Iz primerov je vidno, da če določitelja ne navedemo se Strimg.format obnaša tako, kot če bi navedli določitelj "G".

  • "m","M" - izpis dneva meseca.
  • "y","Y" - izpis meseca leta.
    Primeri:

    (primer16.jpg)
  • "o","O" - t.i. "round-trip" določitelj, pri katerem se v zapisu ohranijo informacije o časovnem pasu. Zapis je oblike "'yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz'".
  • "r","R" - izpiše čas in datum v skladu z mednarodnim formatom RFC1123.
  • "s" - izpiše čas in datum v skladu z predpisi DateTimeFormatInfo.SortableDateTimePattern - gre za obliko "'yyyy'-'MM'-'dd'T'HH':'mm':'ss'" (datum in čas sta ločena z črko "T").
  • "u" - univerzalna šablona za izpis datuma in časa določena z lastnostjo DateTimeFormatInfo.UniversalSortableDateTimePattern oblike "'yyyy'-'MM'-'dd HH':'mm':'ss'Z".
  • "U" - univerzalna šablona za izpis polnega datuma in časa.
    Primeri:

    (primer17.jpg)

Še nekaj primerov izpisov za različne kulture (regije):

(primer18.jpg)

Iz slike je razvidno, da imajo različne države različne predpise za izpis datuma in ure. Izpis v skladu z formtom RFC1123 je pa vedno enak.

Formatiranje datumov - nastavljivi načini

Pri teh načinih formatiranja namesto določitelja v zavite oklepaje zapišemo svojo šablono izpisa, ki je sestavljena iz za to rezerviranih znakov in običajnih znakov.Če pred posebnim znakom zapišemo znak "\", se poseben znak v izpisu pokaže kot običen znak in ne kot poseben. Če hočemo v zapisu imeti dele nizov, jih je priporočljivo obdati z enojnimi narekovaji, saj se lahko zgodi, da te nizi vsebujejo kakšnega od rezerviranih znakov. Posebni znaki:

  • "d" - dan meseca zapisan za številkami od 1 do 31; "dd" - dan meseca zapisan za številkami od 01 do 31; "ddd" - okrajšan zapis imena dneva tedna; "dddd" - polni zapis imena dneva tedna.
  • "f","ff","fff","ffff","fffff","ffffff","fffffff" - desetinke, stotinke tisočinke, desettisočinke, stotisočinke, milijoninke in desetmilojoninke sekunde.
  • "F","FF","FFF","FFFF","FFFFF","FFFFFF","FFFFFFF" - desetinke, stotinke tisočinke, desettisočinke, stotisočinke, milijoninke in desetmilojoninke sekunde. Izpišejo se le tiste števke, ki so pomembne. Torej če je bi imela vrednost na koncu ničlo ali več, se le-te ne bi izpisale.
  • "g","gg" - doba oz. era.
  • "h" - 12-urni format (AM/PM) s številkami od 1 do 12; "hh" - 12-urni format s številkami od 01 do 12.
  • "H" - 24-urni format s številkami od 0 do 23; "HH" - 12-urni format s številkami od 00 do 23.
  • "K" - podatek o časovnem pasu.
  • "m"- minute od 0 do 59; "mm" - minute od 00 do 59.
  • "M" - mesec podan s številom od 1 do 12; "MM" - mesec podan s številom od 01 do 12; "MMM" - okrajšan zapis imena meseca; "MMMM" - polni zapis imena meseca.
  • "s"- sekunde od 0 do 59; "ss" - sekunde od 00 do 59.
  • "t" - zapis prvega znaka oznake za dopoldne/popoldne (AM/PM); "tt" - zapis oznake za dopoldne/popoldne (AM/PM).
  • "y" - leto podano s številko od 0 do 99; "yy" - leto podano s številko od 00 do 99; "yyy" - leto podano z minimalno tremi števkami; "yyyy" - leto podano s štirimi števkami;"yyyyy" - leto podano z petimi števkami.
  • "z" - časovna razlika med našim časom in časom standarda UTC v urah podan s številko od 1 naprej; "zz" - časovna razlika med našim časom in časom standarda UTC v urah podan s številko od 01 naprej; "zz" - časovna razlika med našim časom in časom standarda UTC v urah in minutah.
  • ":" - razdeljitelj komponent časa, "/" - razdeljitelj komponent datuma.


Primeri:

(primer19.jpg)

Formatiranje enumeracij

Enumeracija vsakemu elementu nabora nekih imenovanih konstant dodeli številko. C# nam dovoli, da na naši enumeraciji definiramo t.i. Flags attribute, ki ji omogoči, da postane bitno polje. Primer enumeracije, ki dnevom tedna priredi števila od 1 do 7.

(enumeracija.jpg)

Določitelji:

  • "g" - izpiše del enumeracije v obliki niza, če je to mogoče. Če ni mogoče izpiše numerično vrednost. Če je na enumeraciji definiran atribut Flags, se vrednosti nizov, ki jih hočemo izpisati zlijejo in se izpišejo v vrsto ločeni z vejcami.
  • "f" - izpiše del enumeracije v obliki niza, tako kot če bi bil nastavljen atribut Flags.
  • "d" - izpiše celo število, ki ustreza željeni spremenljivki, v najbolj kompaktni obliki.
  • "x" - izpiše celo število, ki ustreza željeni spremenljivki, v šestnajstiškem zapisu.

Primeri: za primere formatiranja bomo uporabili enumeracijo, ki dnevom tedna priredi neka števila (ne zaporedna od 0 do 7). Iz tege enumeracije je bolj razvidna razlika med "g" in "f" tipom formatiranja.

(enumeracija2.jpg)

Literatura

  1. Neil Smyth: C# 4.0 Essentials, Payload Media, 2010
  2. Christian Nagel: Professional c# 2008, Wiley Publishing, Inc, 2008
  3. http://krez0n.org.ua/archives/798
0%
0%