string.format do formatowania wyjścia
Proszę formatować ciągi znaków za pomocą %s, %d, %f i innych specyfikatorów formatu.
string.format do formatowania wyjścia to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podstawy string.format
string.format(fmt, ...) formatuje wartości za pomocą specyfikatorów formatu w stylu C. Zwraca sformatowany napis. Napis formatujący zawiera zwykły tekst oraz specyfikatory konwersji rozpoczynające się od %. To podstawowy sposób tworzenia precyzyjnego wyniku w Lua.
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 i %i dla liczb całkowitych
%d i %i formatują liczby całkowite. Można dodać szerokość pola, aby zastosować dopełnienie: %5d wyrównuje do prawej w polu o szerokości 5 znaków. %-5d wyrównuje do lewej. %05d dopełnia zerami. Te specyfikatory obcinają liczby zmiennoprzecinkowe — w razie potrzeby najpierw użyj math.floor().
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 i %e dla liczb zmiennoprzecinkowych
%f formatuje liczbę w notacji stałopozycyjnej, a %e w notacji naukowej; %g wybiera krótszą z tych reprezentacji. Specyfikator precyzji (np. %.2f) określa liczbę miejsc po przecinku. Domyślna precyzja wynosi 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 dla napisów
%s wstawia napis. Wartości niebędące napisami są konwertowane za pomocą tostring. Szerokość i wyrównanie działają tak samo jak w przypadku liczb. %q ujmuje napis w formę czytelną dla Lua (z sekwencjami specjalnymi), co jest przydatne podczas serializacji.
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 i %o dla innych podstaw
%x formatuje liczbę całkowitą w systemie szesnastkowym (małe litery), %X w systemie szesnastkowym (wielkie litery), %o w systemie ósemkowym, a %u jako liczbę całkowitą bez znaku. Są one przydatne do wyświetlania masek bitowych, kodów kolorów i programowania niskopoziomowego.
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)) -- 0000deadWiele wartości
Przekaż tyle argumentów, ile jest specyfikatorów formatu. Liczba argumentów musi się zgadzać — zbyt mała liczba powoduje błąd, a dodatkowe argumenty są ignorowane. Używaj napisów formatujących do tworzenia uporządkowanych danych wyjściowych, takich jak tabele, logi czy raporty.
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 ATworzenie szablonów formatu
Przechowuj napisy formatujące jako stałe, aby można było ich ponownie używać. Zapewnia to spójność danych wyjściowych i ułatwia zmianę formatu w jednym miejscu. Formatowanie napisów stanowi podstawę logowania, generowania danych CSV i tworzenia raportów.
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")Dopełnianie i wyrównanie
Używaj specyfikatorów szerokości do wyrównywania danych wyjściowych. Dodatnia szerokość wyrównuje do prawej, a ujemna do lewej. Jest to szczególnie przydatne w tabelach i raportach, w których kolumny powinny być wyrównane. Połącz to z string.rep, aby tworzyć linie rozdzielające.
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 i %% jako literały
%c konwertuje liczbę całkowitą na odpowiadający jej znak ASCII. %% tworzy dosłowny znak procentu. Są one przydatne do generowania znaków specjalnych lub umieszczania znaku % w napisach formatujących.
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 a tostring
Używaj tostring do prostej konwersji wartości dowolnego typu, a string.format do kontroli precyzji, dopełniania i formatowania wielu wartości. string.format("%s", val) wewnętrznie wywołuje tostring podczas konwersji na napis.
-- 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)) -- ERRORSzybkie sprawdzenie
Co zwraca string.format("%05.2f", 3.1)?
Podsumowanie: string.format
Podsumowanie:
%s— napis,%d— liczba całkowita,%f— liczba zmiennoprzecinkowa,%x— zapis szesnastkowy- Szerokość:
%10d— wyrównanie do prawej,%-10d— wyrównanie do lewej,%010d— dopełnienie zerami - Precyzja:
%.2f(2 miejsca po przecinku),%.3s(3 znaki) %qujmuje napis w formę przeznaczoną do analizy przez Lua%%— dosłowny znak procentu
Często zadawane pytania
Czy lekcja „string.format do formatowania wyjścia” jest bezpłatna?
Tak — pełny tekst „string.format do formatowania wyjścia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „string.format do formatowania wyjścia”?
Proszę formatować ciągi znaków za pomocą %s, %d, %f i innych specyfikatorów formatu. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „string.format do formatowania wyjścia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy ciągów znaków: konkatenacja i długość
- Wyszukiwanie i wyodrębnianie podciągów
- string.format do formatowania wyjścia
- string.gsub i string.gmatch