Hasil analisis baru berguna ketika dapat meninggalkan sesi MATLAB dan dibuka oleh alat lain. Topik ini membahas penulisan data ke berkas, mulai dari matriks ke CSV dengan writematrix beserta padanan csvwrite dan dlmwrite. Pembahasan juga mencakup laporan teks berformat dengan fprintf, arsip variabel dengan save pada format .mat dan ascii, serta penyimpanan figur ke berkas gambar dengan print. Setelah membaca topik ini, hasil pengolahan dapat dibagikan sebagai berkas yang dapat dibaca pembaca lain tanpa MATLAB.
Menulis matriks dengan writematrix#
Fungsi writematrix menuliskan matriks ke sebuah berkas dengan format yang dikenali dari ekstensinya. Satu baris matriks menjadi satu baris berkas dan satu kolom matriks menjadi satu kolom yang dipisahkan koma pada CSV. Pemanggilannya cukup dua argumen, yaitu data dan nama berkas tujuan, dan berkas lama dengan nama sama ditimpa tanpa konfirmasi.
% tidak-dijalankan
% matriks pengukuran yang akan ditulis
M = [36.5 36.8 37.1; 37.0 36.9 37.2];
% tulis ke berkas csv
writematrix(M, 'suhu-ekspor.csv');
% tulis ke lembar pertama berkas excel
writematrix(M, 'pengukuran.xlsx');Sebagaimana readmatrix berpasangan dengan readcell pada pembacaan, writematrix berpasangan dengan writecell pada penulisan. Data cell array ditulis dengan writecell sehingga kolom teks ikut tertulis apa adanya. Ketika data berasal dari table, fungsi yang tepat adalah writetable karena fungsi ini menuliskan nama kolom sebagai baris judul secara otomatis. Ketiga fungsi tulis modern ini saling melengkapi sesuai wadah datanya, dan seluruhnya menyimpan angka dengan presisi penuh sehingga hasil tulis dapat dibaca kembali tanpa kehilangan nilai.
Menulis csv dengan csvwrite dan dlmwrite#
Fungsi csvwrite menuliskan matriks ke berkas CSV dengan pembatas koma. Keluarannya tidak tampil di layar sehingga pemeriksaan keberhasilan memakai exist yang mengembalikan dua ketika berkas sudah tercipta. Isi berkas hasilnya berikut ini diperiksa langsung dari berkas yang ditulis skrip tersebut.
suhu = [36.5 36.8 37.1; 37.0 36.9 37.2];
csvwrite('suhu-ekspor.csv', suhu);
exist('suhu-ekspor.csv', 'file')ans = 2# tampilkan isi berkas hasil ekspor
cat suhu-ekspor.csv36.5,36.8,37.1
37,36.9,37.2Nilai 37.0 pada baris kedua tertulis sebagai 37 karena penulisan bawaan csvwrite tidak menyertakan nol yang tidak mengubah nilai. Fungsi dlmwrite melakukan tugas yang sama dengan kendali penuh atas presisi lewat opsi precision yang menerima format angka seperti pada fprintf, serta opsi delimiter untuk pembatas kolom.
dlmwrite('suhu-presisi.csv', suhu, 'precision', '%.2f', 'delimiter', ',');# tampilkan isi berkas dengan presisi dua desimal
cat suhu-presisi.csv36.50,36.80,37.10
37.00,36.90,37.20Kedua berkas memuat data yang sama namun tampilannya berbeda: berkas pertama ringkas sedangkan berkas kedua seragam dua desimal pada setiap kolomnya. Keseragaman itu penting ketika berkas akan dibaca manusia atau diproses alat yang mensyaratkan banyak desimal tetap. Untuk pembatas selain koma, cukup ganti nilai opsi delimiter, misalnya ';' untuk berkas dari wilayah yang memakai koma sebagai penanda desimal.
Laporan teks dengan fprintf#
Penulisan berkas teks berformat memakai tiga langkah: membuka berkas dengan fopen yang menghasilkan pegangan berkas, menulis isinya dengan fprintf, lalu menutupnya dengan fclose. Format %5.0f meratakan kolom menit selebar lima karakter tanpa desimal, sedangkan %.1f menulis suhu dengan satu desimal. Matriks dua baris yang diberikan pada fprintf dikonsumsi kolom demi kolom sehingga tiap pasangan menit dan suhu menjadi satu baris laporan.
fid = fopen('laporan-suhu.txt', 'w');
fprintf(fid, 'Laporan pengukuran suhu\n');
fprintf(fid, 'menit suhu\n');
fprintf(fid, '%5.0f %.1f\n', [0 5 10 15; 36.5 36.8 37.1 36.9]);
fclose(fid);# tampilkan isi laporan yang dihasilkan
cat laporan-suhu.txtLaporan pengukuran suhu
menit suhu
0 36.5
5 36.8
10 37.1
15 36.9Mode 'w' pada fopen membuka berkas untuk ditulis dari awal dan menimpa isi lamanya, sedangkan mode 'a' menambahkan di belakang isi yang sudah ada. Kombinasi fopen, fprintf, fclose adalah cara umum menghasilkan laporan yang mudah dibaca manusia karena judul, spasi, dan tata letak dikendalikan penuh oleh format. Pola ini juga menjadi dasar penulisan berkas data dengan format khusus yang tidak didukung fungsi siap pakai.
Arsip variabel dengan save dan load#
Perintah save menuliskan variabel workspace ke berkas .mat, dan load membacanya kembali. Bentuk pemanggilan fungsi dengan format -v7 menghasilkan berkas yang dapat dibaca lintas implementasi, sehingga arsip yang dibuat di satu lingkungan tetap termuat di lingkungan lain. Nama variabel ikut tersimpan di dalam berkas sehingga load mengembalikannya dengan nama yang sama.
menit = [0 5 10 15];
suhu_baris = [36.5 36.8 37.1 36.9];
save('-v7', 'suhu-arsip.mat', 'menit', 'suhu_baris');
clear menit suhu_baris
load('suhu-arsip.mat');
menitmenit =
0 5 10 15Bentuk ascii menuliskan isi variabel sebagai teks angka biasa yang dapat dibaca editor teks. Konsekuensinya, nama variabel tidak ikut tersimpan sehingga load membuat nama baru dari nama berkasnya: berkas arsip_suhu.txt termuat sebagai variabel arsip_suhu.
suhu = [36.5 36.8 37.1; 37.0 36.9 37.2];
save('arsip_suhu.txt', 'suhu', '-ascii');
clear suhu
load('arsip_suhu.txt');
arsip_suhuarsip_suhu =
36.500 36.800 37.100
37.000 36.900 37.200Menyimpan figur ke berkas gambar#
Perintah print menyimpan figur aktif ke berkas dengan format yang dipilih argumen -d. Pilihan -dsvg menghasilkan gambar vektor SVG yang tetap tajam pada semua ukuran tampilan dan dapat disematkan pada halaman web. Deret suhu berikut digambar lebih dahulu dengan dekorasi lengkap, lalu figurnya disimpan sebagai kurva-suhu.svg.
menit = (0:5:60)';
suhu = [21.5 21.6 21.8 22.1 22.3 22.5 22.4 22.2 22.0 21.9 21.7 21.6 21.5]';
plot(menit, suhu, '-o');
xlabel('menit');
ylabel('suhu (derajat Celsius)');
title('Suhu ruang selama satu jam');
print('-dsvg', 'kurva-suhu.svg');Kode tersebut tidak menghasilkan keluaran teks, tetapi berkas gambar tercipta dan isinya dapat diperiksa. Kurva berikut adalah isi berkas kurva-suhu.svg yang dihasilkan kode di atas.
Pada MATLAB modern, fungsi exportgraphics menjadi pilihan yang lebih rapi. Fungsi ini memotong tepi figur mengikuti isi grafik sehingga tidak ada bidang kosong di sekeliling. Resolusi raster diatur lewat opsi Resolution.
% tidak-dijalankan
% simpan figur aktif sebagai png beresolusi 150 dpi
exportgraphics(gcf, 'kurva-suhu.png', 'Resolution', 150);Alur lengkap ekspor satu pengukuran#
Skrip berikut merangkai seluruh jalur ekspor dalam satu berkas: menulis CSV, menulis laporan teks, mengarsipkan variabel ke .mat, lalu memuatnya kembali untuk memastikan arsipnya utuh. Skrip ini berdiri sendiri dan dapat dijalankan langsung.
% ekspor_laporan.m: menulis data ke berkas csv, teks, dan mat lalu memuatnya kembali
% data pengukuran yang akan diekspor
suhu = [36.5 36.8 37.1; 37.0 36.9 37.2];
% tulis sebagai berkas csv
csvwrite('suhu-ekspor.csv', suhu);
% tulis laporan teks dengan format
fid = fopen('laporan-suhu.txt', 'w');
fprintf(fid, 'Laporan pengukuran suhu\n');
fprintf(fid, 'menit suhu\n');
fprintf(fid, '%5.0f %.1f\n', [0 5 10 15; 36.5 36.8 37.1 36.9]);
fclose(fid);
% simpan ke berkas mat lalu muat kembali
save('-v7', 'suhu-arsip.mat', 'suhu');
clear suhu
load('suhu-arsip.mat');
fprintf('matriks termuat kembali: %d baris, %d kolom\n', size(suhu, 1), size(suhu, 2));matriks termuat kembali: 2 baris, 3 kolomKeluaran terakhir membuktikan putaran penuh: data yang ditulis ke berkas .mat berhasil dimuat kembali dengan bentuk yang sama. Tiga berkas lain yang dihasilkan skrip ini adalah suhu-ekspor.csv untuk alat lain, laporan-suhu.txt untuk dibaca manusia, dan suhu-arsip.mat untuk sesi MATLAB berikutnya. Menjalankan skrip beberapa kali menghasilkan isi berkas yang persis sama karena seluruh angka berasal dari literal data, sehingga hasil ekspor dapat diperiksa ulang dengan membandingkan berkasnya secara langsung. Pemilihan format mengikuti tujuan pembaca berkas, dan seluruh pilihan itu kini sudah tersedia dalam satu alur kerja.
Kesalahan umum#
- Berkas tujuan tertimpa tanpa konfirmasi. csvwrite, dlmwrite, dan fopen mode
'w'langsung mengganti isi berkas lama yang bernama sama. Hasil analisis kemarin hilang begitu skrip dijalankan ulang. Simpan berkas penting dengan nama yang membawa tanggal atau nomor versi sebelum menulis ulang. - Lupa menutup pegangan berkas. Isi yang ditulis fprintf belum dijamin lengkap sampai fclose dijalankan, sehingga berkas yang dibaca sebelum ditutup dapat berisi potongan separuh jadi. Tutup selalu pegangan berkas di akhir penulisan, dan gunakan pola buka, tulis, tutup pada satu blok kode yang sama.
- Mengharapkan nama variabel lama pada berkas ascii. Format ascii tidak menyimpan nama, sehingga load membuat nama baru dari nama berkasnya. Tanda hubung tidak sah dalam nama variabel sehingga diubah menjadi garis bawah: berkas
suhu-arsip.txttermuat sebagai variabelsuhu_arsip, bukansuhu, dan kode yang mengharapkan nama lama menjadi gagal. Beri nama berkas ascii dengan huruf, angka, dan garis bawah saja, sepertiarsip_suhu.txt, agar nama variabel hasil load mudah ditebak.
Ringkasan#
- writematrix menulis matriks ke berkas dengan format yang dikenali ekstensi, dan padanan lintas implementasinya adalah csvwrite serta dlmwrite dengan opsi precision dan delimiter.
- Laporan teks dibangun dengan fopen, fprintf berformat, lalu fclose, dan isi hasilnya dapat diperiksa dengan membaca berkasnya.
- save dengan format -v7 mengarsipkan variabel lengkap dengan namanya untuk lintas implementasi, sedangkan format ascii hanya menyimpan angka dengan nama baru dari nama berkas.
- Perintah print dengan
-dsvgmenyimpan figur aktif sebagai gambar vektor, dan exportgraphics menjadi padanan modernnya pada MATLAB R2020a ke atas.
Referensi#
- writematrix — MathWorks — Rujukan fungsi writematrix untuk menulis matriks ke berkas.
- csvwrite — MathWorks — Rujukan fungsi csvwrite untuk menulis CSV.
- dlmwrite — MathWorks — Rujukan fungsi dlmwrite beserta opsi precision dan delimiter.
- fprintf — MathWorks — Rujukan fungsi fprintf untuk penulisan terformat.
- save — MathWorks — Rujukan perintah save beserta format -v7 dan ascii.
- print — MathWorks — Rujukan perintah print untuk menyimpan figur.
- exportgraphics — MathWorks — Rujukan fungsi exportgraphics untuk ekspor figur modern.