OnWorks Linux dan Windows Online Workstations

logo

Pengehosan Dalam Talian Percuma untuk Workstation

<Sebelum | Contents [show] | Seterusnya>

printf – Format Dan Cetak Data

Tidak seperti arahan lain dalam bab ini, perintah Printf arahan tidak digunakan untuk talian paip (ia tidak menerima input standard) dan ia juga tidak menemui aplikasi yang kerap secara langsung pada baris arahan (kebanyakannya digunakan dalam skrip). Jadi mengapa ia penting? Kerana ia digunakan secara meluas.

printf (daripada frasa “print formatted”) pada asalnya dibangunkan untuk bahasa pengaturcaraan C dan telah dilaksanakan dalam banyak bahasa pengaturcaraan termasuk shell. Malah, dalam bash, printf adalah terbina.

printf berfungsi seperti ini:

printf “format" hujah

Perintah diberikan rentetan yang mengandungi perihalan format yang kemudiannya digunakan pada senarai argumen. Hasil yang diformatkan dihantar ke output standard. Berikut adalah contoh remeh:



[saya@linuxbox ~]$ printf "Saya memformat rentetan: %s\n" foo

Saya memformat rentetan: foo

[saya@linuxbox ~]$ printf "Saya memformat rentetan: %s\n" foo

Saya memformat rentetan: foo


Rentetan format mungkin mengandungi teks literal (seperti "Saya memformat rentetan:"), urutan melarikan diri (seperti \n, watak baris baharu), dan urutan bermula dengan % watak, yang dipanggil spesifikasi penukaran. Dalam contoh di atas, spesifikasi penukaran %s digunakan untuk memformat rentetan "foo" dan meletakkannya dalam output arahan. Ini sekali lagi:



[saya@linuxbox ~]$ printf "Saya memformat '%s' sebagai rentetan.\n" foo

Saya memformat 'foo' sebagai rentetan.

[saya@linuxbox ~]$ printf "Saya memformat '%s' sebagai rentetan.\n" foo

Saya memformat 'foo' sebagai rentetan.


Seperti yang dapat kita lihat, %s spesifikasi penukaran digantikan dengan rentetan “foo” dalam output arahan. Penukaran s digunakan untuk memformat data rentetan. Terdapat penentu lain untuk jenis data lain. Jadual ini menyenaraikan jenis data yang biasa digunakan:


Jadual 21-4: Penentu Jenis Data cetakan biasa


Penerangan Penentu

Penerangan Penentu

d Formatkan nombor sebagai integer perpuluhan yang ditandatangani.


gambar

f Format dan keluarkan nombor titik terapung.


gambar

o Formatkan integer sebagai nombor perlapanan.


gambar


gambar

s Formatkan rentetan.


gambar

x Formatkan integer sebagai nombor perenambelasan menggunakan huruf kecil af di mana perlu.


gambar

X Sama seperti x tapi guna huruf besar.


gambar

% Cetak simbol % literal (iaitu, nyatakan “%%”)


gambar


Kami akan menunjukkan kesan setiap penentu penukaran pada rentetan "380":



[saya@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C

[saya@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C


Memandangkan kami menetapkan enam penentu penukaran, kami juga mesti membekalkan enam hujah untuk

printf untuk diproses. Enam keputusan menunjukkan kesan setiap penentu.

Beberapa komponen pilihan boleh ditambah pada penentu penukaran untuk melaraskan keluarannya. Spesifikasi penukaran yang lengkap mungkin terdiri daripada yang berikut:

%[bendera][lebar][.ketepatan]penukaran_spesifikasi

Berbilang komponen pilihan, apabila digunakan, mesti muncul dalam susunan yang dinyatakan di atas untuk ditafsirkan dengan betul. Berikut ialah huraian setiap satu:


Jadual 21-5: printf Komponen Spesifikasi Penukaran


Penerangan Komponen

Penerangan Komponen

bendera Terdapat lima bendera yang berbeza:


gambar

# – Gunakan "format ganti" untuk output. Ini berbeza mengikut jenis data. Untuk penukaran o (nombor oktal), output diawali dengan

0. Untuk penukaran x dan X (nombor heksadesimal), output masing-masing diawali dengan 0x atau 0X.


gambar

0–(sifar) Pad output dengan sifar. Ini bermakna medan akan diisi dengan sifar pendahuluan, seperti dalam "000380".


gambar

- – (sempang) Jajarkan keluaran ke kiri. Secara lalai, printf menjajarkan output.


gambar

' ' – (ruang) Hasilkan ruang utama untuk nombor positif.


gambar

+ – (tanda tambah) Tandakan nombor positif. Secara lalai, printf sahaja


gambar


gambar

menandakan nombor negatif.


gambar

lebar Nombor yang menyatakan lebar medan minimum.


gambar

.ketepatan Untuk nombor titik terapung, nyatakan bilangan digit ketepatan yang akan dikeluarkan selepas titik perpuluhan. Untuk penukaran rentetan, ketepatan menentukan bilangan aksara untuk dikeluarkan.


gambar


Berikut ialah beberapa contoh format yang berbeza dalam tindakan:


Jadual 21-6: Cetak Contoh Spesifikasi Penukaran


Hujah

format

Hasilnya

Nota

380

"%d"

380

Pemformatan mudah an

bilangan bulat.

380

"%#x"

0x17c

Integer diformatkan sebagai a

nombor perenambelasan menggunakan

bendera "format ganti".

380

"% 05d"

00380

Integer diformatkan dengan

sifar pendahuluan (padding)

dan lebar medan minimum

daripada lima aksara.

380

"%05.5f"

380.00000

Nombor diformatkan sebagai a

nombor titik terapung dengan

padding dan lima perpuluhan

tempat ketepatan. Sejak

minimum yang ditetapkan

lebar medan (5) adalah kurang daripada

lebar sebenar

nombor berformat, yang

padding tiada kesan.

380

"%010.5f"

0380.00000

Dengan meningkatkan

lebar medan minimum hingga 10

padding kini kelihatan.

380

"%+d"

+380

Bendera + menandakan positif

nombor.

380

"%-d"

380

Bendera - kiri menjajarkan

pemformatan.


abcdefghijk

"% 5s"

abcedfghijk

Rentetan yang diformatkan dengan lebar medan minimum.

abcdefghijk

"%.5s"

abcde

Dengan menggunakan ketepatan pada rentetan, ia dipotong.


Sekali lagi, Printf digunakan kebanyakannya dalam skrip di mana ia digunakan untuk memformat data jadual, dan bukannya pada baris arahan secara langsung. Tetapi kami masih boleh menunjukkan cara ia boleh digunakan untuk menyelesaikan pelbagai masalah pemformatan. Mula-mula, mari keluarkan beberapa medan yang dipisahkan oleh aksara tab:



[saya@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

str1 str2 str3

[saya@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

str1 str2 str3


Dengan memasukkan \t (urutan melarikan diri untuk tab), kami mencapai kesan yang diingini. Seterusnya, beberapa nombor dengan pemformatan yang kemas:



[saya@linuxbox ~]$ printf "Barisan: %05d %15.3f Keputusan: %+15d\n" 1071 3.14156295 32589

Talian: 01071 3.142 Keputusan: +32589

[saya@linuxbox ~]$ printf "Barisan: %05d %15.3f Keputusan: %+15d\n" 1071 3.14156295 32589

Talian: 01071 3.142 Keputusan: +32589


Ini menunjukkan kesan lebar medan minimum pada jarak medan. Atau bagaimana pula dengan memformat halaman web kecil:



[saya@linuxbox ~]$ printf " \n\t \n\t\t %s \n

\t \n\t \n\t\t %s \n\t \n \n" "Tajuk Halaman" "Kandungan Halaman"

Tajuk Halaman

Kandungan Halaman

[saya@linuxbox ~]$ printf " \n\t \n\t\t %s \n

\t \n\t \n\t\t %s \n\t \n \n" "Tajuk Halaman" "Kandungan Halaman"

Tajuk Halaman

Kandungan Halaman


Pengkomputeran Awan OS teratas di OnWorks: