readtable yang kita kenal di chapter-chapter sebelumnya pintar mendeteksi format — tapi “pintar menebak” tidak sama dengan “selalu benar”. Kolom tanggal kerap terbaca sebagai teks, nomor telepon kehilangan angka nol di depannya, dan kode pelanggan berformat 00123 berubah menjadi 123. Import options memberi kita kendali: periksa tebakan MATLAB lebih dulu, perbaiki tipenya, baru baca datanya. Cakupan chapter ini:
detectImportOptionsuntuk menginspeksi nama dan tipe kolom sebelum membacasetvartypeuntuk memperbaiki kolom yang salah tipepreview, rentang (Range), sheet, delimiter, dan penanganan nilai kosong- Padanan jalur klasik
textscanuntuk Octave
Masalah: Deteksi Otomatis yang Salah Tebak #
Berkas tabular menyimpan semuanya sebagai teks; pembacalah yang menentukan tipe. readtable menebak dengan cara memindai sampel baris, dan tiga tebakan klasik yang meleset:
| Gejala | Penyebab | Perbaikan |
|---|---|---|
kolom tanggal jadi char/string, bukan datetime | teks ISO seperti 2024-01-02 bisa terdeteksi teks biasa | setvartype(opts, 'tanggal', 'datetime') |
00123 menjadi 123 | kolom berisi digit ditebak double | setvartype(opts, 'id', 'char') |
tanda - atau N/A jadi NaN tanpa kabar | placeholder nilai kosong ikut terbaca | TreatAsMissing pada saat deteksi |
Perbaikan semua kasus itu membutuhkan satu prasyarat: melihat tebakan MATLAB sebelum data masuk memori.
detectImportOptions: Periksa Sebelum Membaca #
Mekanismenya: detectImportOptions(namaBerkas) memindai berkas dan mengembalikan object opts — rencana import yang belum dieksekusi. Kita membaca propertinya, mengubah yang perlu, lalu menyerahkan opts ke readtable. Kode berikut hanya berjalan di MATLAB (R2016b+):
% MATLAB-only di Octave: inspeksi tebakan tipe kolom (R2016b+)
opts = detectImportOptions('kasir.csv');
disp([opts.VariableNames' opts.VariableTypes'])Tampilan disp memasangkan tiap nama kolom dengan tipenya — misalnya {'tanggal'} {'char'} dan {'nilai'} {'double'} — sehingga ketidakcocokan terlihat sebelum satu baris data pun dibaca. Properti yang paling sering kita sentuh:
Properti opts | Isinya | Kegunaan |
|---|---|---|
VariableNames | nama tiap kolom | mengenali kolom yang akan diperbaiki |
VariableTypes | tipe yang ditebak | audit tipe sebelum membaca |
SelectedVariableNames | kolom yang akan dibaca | memfilter: baca sebagian kolom saja |
VariableNamingRule | 'modify' (default) atau 'preserve' | header bernama aneh diubah jadi identifier valid atau dipertahankan |
Nilai 'modify' mengubah header seperti Tanggal Lahir menjadi TanggalLahir (tanpa spasi, sesuai aturan identifier); 'preserve' membiarkan nama asli — aksesnya jadi T.('Tanggal Lahir').
setvartype: Perbaiki Tipe Kolom #
Setelah audit menemukan kolom yang salah, setvartype mengganti tipenya di rencana import. Mekanismenya: opts = setvartype(opts, selection, type) mengubah kolom yang disebut di selection (satu nama atau cell array nama) menjadi type:
% MATLAB-only di Octave: perbaiki tipe lalu baca (R2016b+)
opts = detectImportOptions('kasir.csv');
opts = setvartype(opts, 'tanggal', 'datetime');
opts = setvartype(opts, 'nilai', 'int32');
T = readtable('kasir.csv', opts);Pilihan type yang umum: 'char' dan 'string' untuk teks, 'double'/'single' untuk pecahan, 'int32'/'uint8' untuk bilangan bulat, 'datetime' untuk tanggal-waktu, 'logical' untuk kolom benar/salah, dan 'categorical' untuk kolom dengan sedikit kategori unik. Ganti banyak kolom sekaligus dengan cell array: setvartype(opts, {'nilai','diskon'}, 'single') — pola dari contoh resmi yang mengubah seluruh kolom teks patients.xls menjadi 'string'.
preview, Rentang, dan Sheet #
Berkas besar atau aneh layak diintip dulu. Mekanismenya: preview(namaBerkas, opts) mengembalikan delapan baris pertama mengikuti rencana opts — uji murah sebelum komitmen membaca jutaan baris:
% MATLAB-only di Octave: pratinjau, rentang, dan sheet
opts = detectImportOptions('kasir.csv');
opts.SelectedVariableNames = {'kasir', 'nilai'}; % hanya dua kolom ini
T8 = preview('kasir.csv', opts);
opts = detectImportOptions('laporan.xlsx', 'Sheet', 'Q1');
opts.DataRange = 'A5'; % data mulai baris 5
T = readtable('laporan.xlsx', opts);Argumen name-value saat deteksi menangani berkas yang tidak standar: NumHeaderLines melewati beberapa baris judul, Delimiter mengganti pemisah (misalnya ';' untuk CSV Eropa), TreatAsMissing menandai teks seperti '-' sebagai NaN, dan ReadVariableNames menentukan apakah baris pertama adalah nama kolom. Untuk spreadsheet, Sheet memilih lembar kerja dan DataRange/Range memotong area baca — 'A5' berarti mulai baris 5 kolom A.
Jalur Octave: textscan dengan Format Manual #
Octave tidak memiliki detectImportOptions/setvartype/readtable, tetapi filosofinya bisa direplikasi: textscan tidak pernah menebak — format specifier yang kita tulis adalah keputusan final. Kolom tanggal dibaca %s lalu dikonversi manual, kolom angka langsung %d:
fid = fopen('kasir.csv', 'r');
C = textscan(fid, '%s %s %d', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid);
tanggal = C{1}; % kolom tanggal tetap berupa teks
kasir = C{2};
nilai = C{3};
fprintf('kolom kasir : %s %s %s\n', kasir{:});
fprintf('total nilai : Rp%d\n', sum(nilai));
tanggalNum = str2double(strrep(tanggal, '-', ''));
fprintf('tanggal num : %d %d %d\n', tanggalNum);Output yang Dihasilkan:
kolom kasir : Budi Siti Ani
total nilai : Rp57500
tanggal num : 20240102 20240103 20240104Mari kita bedah baris-baris kode di atas:
- Baris 2 (
'%s %s %d'): tiga specifier adalah “setvartype manual” — tanggal dan kasir dikunci sebagai teks, nilai sebagai bilangan bulat; tidak ada tebakan yang bisa meleset. - Baris 7 (
tanggal = C{1}): tanggal2024-01-02aman sebagaichar— nol dan tanda hubung tidak pernah hilang karena tidak ada konversi otomatis. - Baris 11 (
strrep(tanggal, '-', '')): konversi ke angka20240102terjadi hanya saat kita memintanya, lewatstr2doublesetelah tanda hubung dibuang — kontrol penuh, hasil yang bisa diprediksi.
contoh.m pada bagian bawah halaman memakai guard exist: jalur detectImportOptions + setvartype + readtable berjalan di MATLAB, sedangkan di Octave jalur textscan di atas yang aktif — keduanya mencapai hasil yang sama.
Ringkasan #
detectImportOptions mengubah pembacaan tabel dari “tebak lalu baca” menjadi “audit, perbaiki, lalu baca”: opts.VariableTypes memperlihatkan tebakan tipe, setvartype membetulkannya, preview mengintip delapan baris pertama, dan name-value seperti Sheet, Range, Delimiter, TreatAsMissing menyesuaikan berkas yang tidak standar. Di Octave, padanannya adalah disiplin format manual textscan — tidak ada otomatisasi, tetapi juga tidak ada kejutan. Membaca dan menulis kini terkendali; sisanya manajemen berkas itu sendiri — folder, salin, pindah, bersihkan — di chapter File Management.