Maklumat

Tulisan-tulisan terkini dapat juga didapatkan di halaman Kompasiana di alamat https://kompasiana.com/didikaha

Khusus untuk konten-konten sastra seperti puisi, cerpen dan esai silahkan kunjungi http://blog.edelweis-art.com. Terima kasih (Penulis)

Sabtu, Mei 09, 2015

Cara Mengambil Angka dari Sebuah String pada PHP & MySQL

Baik pada PHP maupun MySQL, telah disediakan function untuk mengambil atau mengekstrak angka dari sebuah string. Pada PHP, antara lain kita bisa menggunakan function intval() dan floatval(), sementara pada MySQL kita bisa menggunakan function convert(). Contoh penggunaannya yaitu:
// PHP
$teks1 = "12 buah";
$angka1 = intval($teks1); // hasilnya 12
$teks2 = "2.5%";
$angka2 = floatval($teks2); // hasilnya 2.5

// MySQL
SELECT CONVERT('24 ons', SIGNED); # hasilnya 24
Namun demikian, baik function intval() dan floatval() pada PHP maupun convert() pada MySQL, hanya dapat diterapkan jika posisi angka berada di bagian awal string. Jika posisi angka tidak berada di awal string, akan menghasilkan 0. Contoh:
// PHP
$teks3 = "pukul 14";
$angka3 = intval($teks3); // hasilnya 0
$teks4 = "km 2.3";
$angka4 = floatval($teks4); // hasilnya 0

// MySQL
SELECT CONVERT('F12', SIGNED); # hasilnya 0
Toh, untuk kasus yang sederhana, yaitu di mana komposisi string sudah kita ketahui, misalnya bagian yang bukan angka hanya "Rp ", atau angka selalu dimulai pada urutan ke-4 pada string, kita masih bisa mengakalinya, yaitu dengan cara membuang bagian yang bukan angka dengan menggunakan function str_replace() atau substr_replace() pada PHP atau function replace() pada MySQL, yang seringkali juga dipadukan dengan fungsi trim(), ltrim() ataupun rtrim(). Misalnya:
// PHP

// mengambil angka pada string uang yang disertai dengan "Rp"

$teks5 = "Rp 3500";
$angka5 = str_replace("Rp","",$teks5); // hasilnya " 3500"
$angka5 = ltrim($angka5); // sekarang menjadi "3500"

$teks6 = "12750 Rp";
$angka6 = rtrim(str_replace("Rp","",$teks6)); // hasilnya "12750"

// mengambil angka pada string alphanumeric yang berada di bagian tengah diapit masing-masing 2 huruf
$teks7 = "ab1123cd";
$angka7 = substr_replace(substr_replace($teks7,"",0,2),"",-2); // hasilnya 1123
$teks8 = "fc101074ae";
$angka8 = substr_replace(substr_replace($teks8,"",0,2),"",-2); // hasilnya 101074

// MySQL
SELECT TRIM(REPLACE('nomor 28', 'nomor', '')); # hasilnya 28
Selain function-function di atas, masih terdapat pula beberapa function lain yang bisa digunakan untuk mengekstrak angka dari sebuah string seperti substr() dan substring() pada PHP ataupun substring() dan substring_index() pada MySQL. Namun, semua function tersebut hanya berlaku jika kita telah mengetahui komposisi stringnya. Lalu, bagaimana halnya jika kita tidak dapat memastikan komposisi stringnya? Misalnya huruf apa sajakah yang menyertai angka pada string tersebut, atau apakah angkanya berurutan atau tidak, atau apakah selain huruf ada karakter-karakter lainnya yang menyertai angka pada string atau tidak.
Pada PHP, untuk string yang acak, kita bisa menggunakan bantuan regular expresion untuk membuat rumusan yang bisa berlaku umum untuk mengekstrak angka dari sebuah string. Misalnya kita ingin mengambil angka dari string 'rumah nomor 35 di jalan merdeka' dan 'ab72dw5d659s3', kita bisa melakukannya dengan menggunakan function preg_replace(), yaitu:
// PHP

$pattern = '/([^0-9]+)/';

$teks1 = 'rumah nomor 35 di jalan merdeka';
$angka1 = preg_replace($pattern,'',$teks1); // hasilnya 35

$teks2 = 'ab72dw5d659s3';
$angka2 = preg_replace($pattern,'',$teks2); // hasilnya 7256593
Sayangnya, pada MySQL, meski tersedia pula function regular expresion untuk string, namun itu hanya berfungsi untuk pencarian saja, yaitu regexp. Karenanya, kita mesti menentukan atau membuat sendiri function yang akan kita gunakan untuk mengekstrak angka dari sebuah string.
Berikut adalah sebuah function yang bisa digunakan untuk mengekstrak angka dari sebuah string. Function ini saya ambil dari forum yang membahas hal yang sama. Function ini telah saya kembangkan agar bisa dipergunakan pada komposisi string yang lebih kompleks.
DELIMITER //

DROP FUNCTION IF EXISTS GET_NUMBER //

CREATE FUNCTION GET_NUMBER(input VARCHAR(255))
  RETURNS VARCHAR(255)
BEGIN
  DECLARE output   VARCHAR(255) DEFAULT '';
  DECLARE iterator INT          DEFAULT 1;

  WHILE iterator < (LENGTH(input) + 1) DO
    IF SUBSTRING(input, iterator, 1) IN ('.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-') THEN
      SET output = CONCAT(output, SUBSTRING(input, iterator, 1));
    END IF;
    
    SET iterator = iterator + 1;
  END WHILE;

  WHILE (SUBSTRING(output, -1) = '.') OR ((SUBSTRING(output, -1) = '0') AND (SUBSTRING(output, 1, LENGTH(output) - 1) LIKE '%.%')) DO
    SET output = SUBSTRING(output, 1, LENGTH(output) - 1);
  END WHILE;

  WHILE SUBSTRING(output, 1, 1) = '0' DO
    SET output = SUBSTRING(output, 2);
  END WHILE;

  WHILE SUBSTRING(output, 1, 2) = '-0' DO
    SET output = CONCAT('-', SUBSTRING(output, 3));
  END WHILE;

  IF REPLACE(REPLACE(REPLACE(output, '.', ''), '0', ''), '-', '') = '' THEN
    SET output = '';
  ELSEIF (LENGTH(output) - LENGTH(REPLACE(output, '.', ''))) > 1 THEN
    SET output = REPLACE(output, '.', '');
  ELSEIF (((LENGTH(output) - LENGTH(REPLACE(output, '-', ''))) = 1) AND (SUBSTRING(output, 1, 1) <> '-')) OR ((LENGTH(output) - LENGTH(REPLACE(output, '-', ''))) > 1) THEN
    SET output = REPLACE(output, '-', '');
  END IF;

  IF SUBSTRING(output, 1, 1) = '.' THEN
    SET output = CONCAT('0', output);
  ELSEIF SUBSTRING(output, 1, 2) = '-.' THEN
    SET output = CONCAT('-0', SUBSTRING(output, 2));
  ELSEIF output = '' THEN
    SET output = '0';
  END IF;

  RETURN output;
END //

DELIMITER ;

# contoh penggunaan:
SELECT GET_NUMBER('asdf275$$s43::21'); # hasilnya 2754321
SELECT GET_NUMBER('ukuran 17.2 inci'); # hasilnya 17.2
SELECT GET_NUMBER('-def000.15ds00'); # hasilnya -0.15
SELECT GET_NUMBER('.75kg'); # hasilnya 0.75
Demikian, semoga bermanfaat.

Selasa, Juli 16, 2013

Mengatasi Error Grub: "No Such Partition"

Bagi Anda yang menggunakan 'dual boot' sistem operasi (Windows dan Linux Ubuntu), mungkin Anda pernah, atau sedang mengalami masalah (biasanya setelah menambah atau menghapus partisi dari Windows) di mana saat menjalankan komputer atau laptop, tidak muncul daftar sistem operasi yang biasa ditampilkan oleh GRUB (Grand Unified Bootloader)-nya Ubuntu melainkan dua baris berikut:

error: no such partition.
grub rescue>

Ya, error ini muncul karena dengan ditambahkan atau dihapusnya partisi, posisi partisi Ubuntu menjadi tergeser, sehingga posisi bootloader (dalam hal ini GRUB) yang telah terekam pada MBR (Master Boot Record) komputer tidak lagi valid. Untuk mengatasinya, mula-mula kita lihat daftar partisi yang ada pada komputer dengan mengetikkan perintah 'ls':

grub rescue> ls

Hasilnya akan muncul daftar seperti di bawah ini:

(hd0)   (hd0,msdos7)   (hd0,msdos6)   (hd0,msdos5)   (hd0,msdos1)

Sekarang, coba cek masing-masing partisi, untuk mengetahui keberadaan Ubuntu dengan mengetikkan perintah 'ls (hdx,y)', misalnya:

grub rescue> ls (hd0,5)

Jika yang muncul sebagai berikut:

error: unknown filesystem.

maka isi partisi tersebut bukanlah Ubuntu. Coba lagi misalnya:

grub rescue> ls (hd0,6)

Jika yang muncul seperti berikut:

./  ../  lost+found/  etc/  media/  bin/  boot/  dev/  home/  lib/  ...

Maka berarti Ubuntu ada di partisi ini. Jika demikian, kita bisa melanjutkan dengan memanggil kembali GRUB dengan mengetikkan satu per satu baris-baris perintah berikut:

grub rescue> set prefix=(hd0,6)/boot/grub
grub rescue> set root=(hd0,6)
grub rescue> insmod normal
grub rescue> normal

Setelah itu, komputer akan kembali normal seperti biasa. Daftar pilihan sistem operasi akan muncul kembali.


Namun, ... ini belum selesai. Jika setelah ini Anda langsung menggunakan komputer Anda seperti biasa hingga Anda melakukan shutdown atau restart komputer, maka setelah komputer aktif kembali, error grub ini akan muncul kembali. Sebab, perintah di atas hanya digunakan untuk memanggil GRUB sekali itu. Untuk itu, agar nantinya GRUB bisa muncul dengan sendirinya seperti semula, Anda perlu mendaftarkan ulang GRUB. Caranya, masuk ke Ubuntu. Buka Terminal lalu ketik satu per satu dua baris perintah berikut:

sudo update-grub
sudo grub-install /dev/sda

Finished. :)