Lua Academy · Oppitunti

string.format tulostuksessa

Muotoilkaa merkkijonoja %s-, %d-, %f- ja muilla muotoilumääritteillä.

Oppitunti 3/412 vaihetta

string.format tulostuksessa on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

string.format-funktion perusteet

string.format(fmt, ...) muotoilee arvoja C-tyylisten muotoilumääreiden avulla. Se palauttaa muotoillun merkkijonon. Muotoilumerkkijono sisältää literaalista tekstiä ja %-merkillä alkavia muunnosmääreitä. Se on Luassa ensisijainen tapa tuottaa tarkasti määriteltyä tulostetta.

print(string.format("Hello, %s!", "Lua"))      -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi))   -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))

%d ja %i kokonaisluvuille

%d ja %i muotoilevat kokonaislukuja. Lisätkää leveys täyttöä varten: %5d täyttää oikealta viiden merkin leveyteen. %-5d tasaa vasemmalle. %05d täyttää nollilla. Nämä määreet katkaisevat liukuluvut – käyttäkää tarvittaessa ensin math.floor()-funktiota.

print(string.format("%d",  42))       -- 42
print(string.format("%5d", 42))       --    42 (right-aligned)
print(string.format("%-5d|", 42))     -- 42   | (left-aligned)
print(string.format("%05d", 42))      -- 00042
print(string.format("%+d", 42))       -- +42

%f ja %e liukuluvuille

%f muotoilee kiinteän pisteen esitysmuodossa, %e tieteellisessä esitysmuodossa ja %g valitsee lyhyemmän näistä. Tarkkuusmääre (esimerkiksi %.2f) määrittää desimaalien määrän. Oletustarkkuus on 6.

print(string.format("%.2f",  3.14159)) -- 3.14
print(string.format("%10.3f", 3.14))   --      3.140
print(string.format("%e", 12345.678))  -- 1.234568e+04
print(string.format("%.2e", 0.001))    -- 1.00e-03
print(string.format("%g", 100.0))      -- 100

%s merkkijonoille

%s lisää merkkijonon. Muut kuin merkkijonoarvot muunnetaan tostring-funktion avulla. Leveys ja tasaus toimivat samalla tavalla kuin luvuilla. %q lainausmerkitsee merkkijonon Lua-luettavassa muodossa (escapemerkit mukaan lukien), mikä on hyödyllistä serialisoinnissa.

print(string.format("%-10s|", "hi"))   -- hi        |
print(string.format("%10s|", "hi"))    --         hi|
print(string.format("%.3s", "hello"))  -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val

%x ja %o muille kantaluvuille

%x muotoilee kokonaisluvun heksadesimaalimuodossa (pienillä kirjaimilla), %X isoilla heksadesimaalikirjaimilla, %o oktaalimuodossa ja %u etumerkittömänä kokonaislukuna. Näistä on hyötyä bittimaskien ja värikoodien esittämisessä sekä matalan tason ohjelmoinnissa.

print(string.format("%x",  255))   -- ff
print(string.format("%X",  255))   -- FF
print(string.format("%#x", 255))   -- 0xff (with prefix)
print(string.format("%o",  8))     -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000dead

Useita arvoja

Välittäkää argumentteja yhtä monta kuin muotoilumääreitä on. Argumenttien määrän on täsmättävä: liian vähäiset argumentit aiheuttavat virheen ja ylimääräiset ohitetaan. Rakentakaa muotoilumerkkijonojen avulla jäsenneltyä tulostetta, kuten taulukoita, lokeja tai raportteja.

local function printRow(name, score, grade)
  print(string.format("%-12s  %3d  %s", name, score, grade))
end

printRow("Alice",    95, "A")
printRow("Bob",      87, "B")
printRow("Carol",    91, "A")
-- Alice         95  A
-- Bob           87  B
-- Carol         91  A

Muotoilumallien muodostaminen

Tallentakaa muotoilumerkkijonot vakioiksi uudelleenkäyttöä varten. Näin tuloste pysyy yhdenmukaisena ja muotoa on helppo muuttaa yhdestä paikasta. Merkkijonojen muotoilu on lokituksen, CSV-tulosteen ja raporttien luonnin perusta.

local LOG_FMT = "[%s] %s: %s"

local function log(level, module, msg)
  print(string.format(LOG_FMT, level, module, msg))
end

log("INFO",  "server", "started on port 8080")
log("WARN",  "db",     "connection pool low")
log("ERROR", "auth",   "token expired")

Täyttö ja tasaus

Käyttäkää leveysmääreitä tasattuun tulosteeseen. Positiivinen leveys tasaa oikealle ja negatiivinen vasemmalle. Tästä on erityisesti hyötyä taulukoissa ja raporteissa, joissa sarakkeiden tulee olla kohdakkain. Yhdistäkää tämä string.rep-funktion kanssa erotinviivojen luomiseksi.

local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
  print(string.format(fmt, r[1], r[2], r[3]))
end

%c ja %% literaaleina

%c muuntaa kokonaisluvun vastaavaksi ASCII-merkiksi. %% tuottaa literaalisen prosenttimerkin. Näistä on hyötyä erikoismerkkien luomisessa tai prosenttimerkin lisäämisessä muotoilumerkkijonoon.

print(string.format("%c%c%c", 76, 117, 97))  -- Lua
print(string.format("100%%"))                -- 100%
print(string.format("%.1f%%", 87.5))         -- 87.5%

-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")

string.format ja tostring

Käyttäkää tostring-funktiota yksinkertaiseen minkä tahansa tyypin muuntamiseen ja string.format-funktiota tarkkuuden hallintaan, täyttöön ja useiden arvojen muotoiluun. string.format("%s", val) kutsuu tostring-funktiota sisäisesti merkkijonomuunnoksia varten.

-- tostring: simple, any type
print(tostring(3.14))      -- 3.14
print(tostring(true))      -- true
print(tostring(nil))       -- nil

-- string.format: precision + structure
print(string.format("%.2f", 3.14159))  -- 3.14
print(string.format("%d", 255))        -- 255
-- print(string.format("%d", true))    -- ERROR

Pikatarkistus

Mitä string.format("%05.2f", 3.1) tuottaa?

Kertaus: string.format

Yhteenveto:

  • %s merkkijono, %d kokonaisluku, %f liukuluku, %x heksadesimaaliluku
  • Leveys: %10d tasaus oikealle, %-10d tasaus vasemmalle, %010d täyttö nollilla
  • Tarkkuus: %.2f (2 desimaalia), %.3s (3 merkkiä)
  • %q lainausmerkitsee merkkijonon Lua-jäsentämistä varten
  • %% literaalinen prosenttimerkki
Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”string.format tulostuksessa” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “string.format tulostuksessa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”string.format tulostuksessa”?

Muotoilkaa merkkijonoja %s-, %d-, %f- ja muilla muotoilumääritteillä. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”string.format tulostuksessa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Merkkijonojen perusteet: yhdistäminen ja pituus
  2. Alimerkkijonojen etsiminen ja poimiminen
  3. string.format tulostuksessa
  4. string.gsub ja string.gmatch
← Takaisin: Lua Academy