เมื่อผม include เข้ามายังโปรเจคเพื่อทดสอบ ปรากฎว่า Character ที่คนพัฒนานั้นกำหนด Bad Character ไม่ครบตามความเป็นจริงในรหัสของ ASCII ซึ่งควรจะมีอยู่ที่ 65535 รูปแบบ แต่จากตัวอย่างเค้ากำหนดเพียงแค่ 255 รูปแบบเท่านั้น ผมจึงทำการ Modify บรรทัดที่ 47 ของ Code จาก
Code (C#)
int[] badCharacterShift = new int[256];
มาเป็น
Code (C#)
int[] badCharacterShift = new int[65536];
ส่วนวิธีการเรียกใช้งานให้ทดลองตามนี้
Code (C#)
StringMatch.BoyerMoore bm = new StringMatch.BoyerMoore("Neural");
string text = string.Empty;
using (System.IO.StreamReader sr = new System.IO.StreamReader(@"D:\test.txt"))
{
text = sr.ReadToEnd();
sr.Close();
}
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
foreach (int index in bm.BoyerMooreMatch(text))
{
//Console.WriteLine("Matched at index {0}", index);
}
sw.Stop();
Console.WriteLine("Boyer Moore = " + sw.Elapsed.TotalSeconds);
จาก Code ผมมีไฟล์ที่ชื่อ test.txt เก็บอยู่ที่ Drive D โดยในไฟล์ text.txt มีเนื้อหาข้อมูล text ยาวประมาณ 180,000 ตัวอักษร และบรรทัดแรกมีการสร้าง Instance BoyerMoore bm โดยตรงนี้ จขกท. ต้องกำหนดค่าที่ต้องการค้นหานะครับ ผมสมมุติเป็นคำว่า "Neural" ถ้าเป็นตัวอักษรเป็น Case Sensitive นะครับ แต่ตัวเลขก็ไม่มีปัญหาอะไร เปิด StreamReader อ่านไฟล์เข้ามาเก็บในตัวแปร text และใช้ method bm.BoyerMooreMatch(text) แต่ตรงนี้ต้องวนลูปเพราะว่าการทำ String Matching ต้องค้นหาตัวอักษรในชุดต่อไป ถ้าพบจะมีการคืนค่า index เป็นค่า integer ออกมานะครับว่าพบคำว่า Neural แล้วที่ Index เท่าไร