Mengecek Urutan File dengan Python (bagian 2)


Melanjutkan artikel sebelumnya. Sebelumnya kita telah mengetahui bagaimana pola dari nama file. Dari sana kita bisa kembangkan perintah untuk komputer agar mengecek kelengkapan file.

Daftar Konstanta dan Variabel

Sebelum masuk ke penjabaran perintah-perintah, perlu disiapkan dahulu apa saja konstanta dan variabel penting yang akan dipakai.  Beberapa konstanta dan variabel sudah dijelaskan sebelumnya.

Konstanta Contoh
DIR “D:\Dokumen\Buku\Memilikiformatswf\\”
SEPARATOR [‘doc=’,’&’,’page=’,’.swf’]
SEPDOCNUM [‘M’,”]
UODOC [’TOC’]

DIR adalah path tempat menyimpan file-file yang ingin kita cek kelengkapannya.

SEPARATOR hanyalah pembatas untuk mengidentifikasi urutan file. Silakan baca lagi uraian di artikel sebelumnya. SEPARATOR ini bertipe list dengan format [SDOC,EDOC,SPAGE,EPAGE].

SEPDOCNUM adalah “SEPARATOR” untuk nama dokumen. Misalnya nama file adalah “doc=M1&page=3.swf” dan DOCNUM adalah “M1”. Jika SEPDOCNUM adalah [“M”,””], yang akan dijadikan urutan dokumen adalah 1.

UODOC (unordered doc) adalah nama-nama dokumen yang tidak menunjukkan urutan, misalnya “TOC”.

 

Variabel Contoh
docPageTable {‘TOC’:[1,2], ’M1’:[1,3], ’M3’:[1,2,3,4], ’OTHER’:[‘anu.3gp’,’biji.py’]}
missingPageTable {‘M1’:[2]}
missingDocList [M2]

 

docPageTable

docPageTable merupakan tabel yang memuat seluruh file di bawah direktori theDir, disusun dengan dikelompokkan berdasarkan doc. Formatnya adalah

{‘namadokumen1’:[1,2,3,…,n], ‘namadokumen2’:[1,2,3,…,n], …, ‘OTHER’:[‘fileberekstensilaindalamfolder’]}

Misalkan dalam folder DIR terdapat file-file berikut ini:

doc=TOC&page=1.swf
doc=TOC&page=2.swf
doc=M1&page=1.swf
doc=M1&page=3.swf
doc=M3&page=1.swf
doc=M3&page=2.swf
doc=M3&page=3.swf
doc=M3&page=4.swf
anu.3gp
biji.py

Maka

docPageTable = {‘TOC’:[1,2],’M1′:[1,3],’M3′:[1,2,3,4],’OTHER':[‘anu.3gp’,’biji.py]}

Ilustrasinya seperti ini:

TOC M1 M3 OTHER
1 1 1 anu.3gp
2 3 2 biji.py
3
4

 

missingPageTable

missingPageTable merupakan tabel yang memuat dugaan page-page yang dilewatkan pada setiap doc di docPageTable. Formatnya sama dengan docPageTable, kecuali tidak ada ‘OTHER’.

{‘namadokumen1’:[‘page_a’,’page_b’,’page_c’], ‘namadokumen2’:[‘ page_d’,’ page_e’,’ page_f’], …}

Misalkan pada contoh sebelumnya, file yang dilewatkan adalah “doc=M1&page=2.swf” jika mengasumsikan nama dokumen tidak menunjukkan urutan. Jika diasumsikan nama dokumen menunjukkan urutan, maka dokumen M2 juga telah dilewatkan. Asumsi kedua akan dijabarkan panjang lebar di artikel selanjutnya. Sementara ini diasumsikan nama dokumen tidak menunjukkan urutan.

Jika file yang dilewatkan hanya “doc=M1&page=2.swf”,

missingPageTable = {‘M1’:[2]}

Ilustrasinya seperti ini:

M1
2

 

missingDocList

missingDocList merupakan daftar yang memuat dugaan dokumen yang dilewatkan, jika dilihat dari urutan dokumen dalam satu direktori. Ini hanya dapat berlaku jika nama dokumen menunjukkan suatu urutan. Formatnya sederhana hanya berupa daftar.

[‘doc_a’,’doc_b’,’doc_c’]

Misalkan pada contoh sebelumnya, dokumen yang dilewatkan adalah “M2” jika mengasumsikan nama dokumen menunjukkan urutan.

missingDocList = [‘M1’]

Ilustrasinya seperti ini:

missingDocList
‘M1’

 

Setelah menyiapkan konstanta dan variabel penting, aku pecah lebih lanjut perintah-perintah yang sudah dipecah di artikel sebelumnya.

I. Buatkan tabel nama dokumen dan halaman dari nama file-file dalam direktori DIR

I.A. getDocPageTable() hasilkan tabel
I.A.1. getDocPage() ambil data doc-page yang sudah dipisahkan dan catat data dalam tabel
I.A.1.a. isLastNameMatch() pisahkan nama file berekstensi “.swf” dengan nama file berekstensi lainnya

II. Buatkan tabel halaman yang hilang menggunakan tabel dari nomor I

II.A. getMissingPageTable() hasilkan tabel

III. Buatkan daftar dokumen yang hilang menggunakan tabel dari nomor I

III.A. getMissingDocList() hasilkan daftar

IV. Tampilkan semua hasil

IV.A. displayMissingPageTable() tampilkan tabel dari nomor II

IV.B. displayMissingDocList() tampilkan tabel dari nomor III

IV.C. displayGeneralStatistics() tampilkan informasi umum

 

Yang menjadi inti dari semua fungsi di atas sebenarnya adalah getMissingPageTable() dan getMissingDocList(). Pada dasarnya yang dilakukan kedua fungsi ini adalah menghitung dari 1 hingga angka terbesar halaman/dokumen.

 

getMissingPageTable()

Untuk setiap dokumen (semua key docPageTable kecuali ‘OTHER’), ambil halaman terakhirnya. Kemudian, untuk setiap dokumen, hitung dari halaman satu hingga halaman terakhir. Apabila ada yang terlewatkan, catat dalam missingPageTable.

Kelemahan fungsi ini adalah mengasumsikan bahwa dokumen tidak punya urutan tertentu, sehingga suatu dokumen beserta seluruh halamannya bisa saja terlewatkan. Kelemahan berikutnya karena halaman terakhir yang tersedia di folder dianggap halaman terakhir dokumen, halaman-halaman dari pertengahan dokumen hingga halaman terakhir bisa saja terlewatkan. Di artikel berikutnya akan dibahas fungsi yang mengatasi kelemahan-kelemahan ini. :)

 

getMissingDocList()

Ambil dokumen urutan terakhir dalam direktori. Kemudian, hitung dari dokumen pertama hingga dokumen terakhir. Apabila ada yang terlewatkan, catat dalam missingDocList.

Fungsi ini disiapkan untuk mengatasi kelemahan fungsi getMissingPageTable() yang tidak bisa mendeteksi keseluruhan dokumen berurutan yang terlewatkan. Tapi kembali lagi, dokumen belum tentu menunjukkan urutan. Fungsi getMissingPageTable() akan dipakai seterusnya. Sedangkan getMissingDocList() dipakai hanya jika nama dokumen menunjukkan urutan.

Salah satu kelemahan fungsi getMissingPageTable() adalah tidak bisa mendeteksi halaman yang terlewatkan jika halaman itu berada di akhir. Karena itu perlu disiapkan fungsi lain yang bisa mengatasi hal tersebut. Ini akan dibahas di artikel berikutnya. Selain itu juga akan dibahas pemanfaatan kode ini untuk 2 fase pengecekan.

Kode sumber bisa ditemukan pada github.

(BERSAMBUNG)

Komentar Pemirsa