Selamat datang di ForSa! Forum diskusi seputar sains, teknologi dan pendidikan Indonesia.

Welcome to Forum Sains Indonesia. Please login or sign up.

April 20, 2024, 07:03:58 PM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 231
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 163
Total: 163

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

Mencari teks dalam teks

Dimulai oleh Mtk Kerajaan Mataram, Agustus 08, 2008, 07:39:04 AM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Mtk Kerajaan Mataram

Salam
Saya punya permasalahan
Misalnya diberikan dua teks berupa kata, misal kata(1) dan kata(2), dengan
panjang kata(1) > panjang kata(1).
Bagaimana algoritma untuk dimana jika kata(1) termuat dalam kata(2) maka fungsi akan return true dan jika tidak termuat maka akan return false.
Misalnya:
Function Termuat(kata1,kata2) as boolean
....
end function

maka
f(membajak,bajak)=true
f(memukul,pukul)=false
f(tertawa,erta)=true
....dst

Trims

Edit : tambahan
Bisa tulis algoritmanya
Gimana algoritmanya
Kalau bisa codenya dalam visual basic

insan sains

Pake bahasa pemprograman apa yach?

Kalo menggunakan Fox Pro, ada tuh sebuah command yang bisa dipakai untuk masalah ini :
- AT
untuk mencari karakter/kata yang tidak case-sensitive

- ATC
untuk mencari karakter/kata yang case-sensitive
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

izna

kayaknya pake VB ya?

@Insan
coba deh liat atasnya..! :-\
ya kan pke VB? ???
DeNgan CiNta HiDup jaDi InDah, DeNgan iLmu HiDup jaDi MuDah, DeNgan iMan HiDup jaDi TerArah

eky

berhubung saya belum ngerti VB ..
so saya kasih algoritma aja deh ..
moga2 membantu .. ahhaa
>>>>


Function Termuat(kata1,kata2) as boolean
1. pada kata1, cari karakter yang sesuai dengan karakter awal di kata2
2. jika ada,
  2.1 majukan pointer pada kata1
  2.2 majukan pointer pada kata2
  2.3 sesuaikan, apakah 2.1 == 2.2
  2.4 jika benar, ulangi langkah mulai 2.1 sampai karakter pada kata2 habis
3. jika tidak, return false aja ...

end function

nb.
sebenarnya banyak algoritma yang bisa diterapkan..
sebaiknya menggunakan fungsi pengulangan, semisal for atau while
pake array biar lebih gampang ..

selamat mencoba :D

insan sains

#4
Kutip dari: izna pada Agustus 08, 2008, 12:39:17 PM
kayaknya pake VB ya?

@Insan
coba deh liat atasnya..! :-\
ya kan pke VB? ???

hehehe... iya ya.... saya yang kurang jeli atau Izna yang memang cerdas...
hihi.. jadi maluuu....!! Makasih Iz...!!

Kalo pake VB, tidak terlalu susah, soalnya sudah ada command-nya juga, yaitu : instr

Kalau dalam bentuk contoh program, kira2 sperti ini :

Dim sText As String
Dim lFind As Long

sText = "Insan Sains"
lFind = InStr(sText, "Sains")


IFind akan mereturn angka 7
yaitu karakter pertama yang ditemukan dari sText

kalau mau dijadikan tipe boolean, gak susah juga.

Dim sText As String

sText = "Insan Sains"
If InStr(sText, "Sains") Then
   MsgBox "Found the word 'Sains'"
   
Else
   MsgBox "Did not find the word 'Sains'"
End If



Kalau mau dijadikan function, bisa kan?? hehehe...
Cuman tinggal ganti MsgBox menjadi di-return-kan ke nama function-nya.

Nah... usul dari Eky bagus juga tuh...
Itu bisa dipakai untuk mencari kata tertentu dalam sebuah dokumen.

Ini script kalau mau nyobain dengan Visual Basic. Dimana kita punya sebuah form yang telah ditambahkan sebuah richtextbox bernama txtDocument yang diisi dengan tulisan yang ingin dicari, kemudian regular textbox bernama txtFinf yang merupakan kata yang akan dicari, serta sebuah tombol bernama cmdFind untuk memulai pencarian.

sumber : [pranala luar disembunyikan, sila masuk atau daftar.]

-------------------------------------------------------------------

Option Explicit

Private Sub cmdFind_Click()
   ExecuteSearch
End Sub

Private Sub ExecuteSearch()
   Dim sFind As String
   Dim nFindIndex As Integer
   Dim nStartIndex As Integer
   
   sFind = txtFind.Text
   
   nStartIndex = txtDocument.SelStart + txtDocument.SelLength
   
   If nStartIndex = 0 Then
       nStartIndex = 1
   ElseIf nStartIndex >= Len(txtDocument.Text) Then
       If PromptForSearchFromBeginning Then
           txtDocument.SelStart = 1
           txtDocument.SelLength = 0
           nStartIndex = 1
       End If
   End If
   
   nFindIndex = InStr(nStartIndex, txtDocument.Text, txtFind.Text, vbBinaryCompare)
   
   If nFindIndex > 0 Then
       txtDocument.SelStart = nFindIndex - 1
       txtDocument.SelLength = Len(txtFind.Text)
       txtDocument.SetFocus
   Else
       If InStr(1, txtDocument.Text, txtFind.Text, vbBinaryCompare) Then
           If PromptForSearchFromBeginning Then
               txtDocument.SelStart = 1
               txtDocument.SelLength = 0
               'Make recursive call
               ExecuteSearch
           End If
       End If
   End If
End Sub

Private Function PromptForSearchFromBeginning() As Boolean
   Dim eMsgBxRslt As VbMsgBoxResult
   Dim bRetVal As Boolean
   
   eMsgBxRslt = MsgBox("End of Document reached" & vbNewLine & "Would you like to start from the beginning?", vbYesNo, "End of Document")
   bRetVal = (eMsgBxRslt = vbYes)
       
   PromptForSearchFromBeginning = bRetVal
End Function 


-------------------------------------------------------------------

Kalau mau bacaan lebih jelas tentang command instr, bisa lihat help-nya atau tinggal [pranala luar disembunyikan, sila masuk atau daftar.]
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

eky

wah om insan sains jago ...
terima kasih atas info nya om ..
saya sama sekali belum pernah megang VB ..
asik ga sih om??

insan sains

kekeke.... kayak ayam aja.... ("jago")  ;D

sekarang sih udah gak pegang VB lagi...! tinggal sisa-sisanya doang.. Dah berapa tahun yach gak megang lagi nih bahasa pemprograman?

Btw.. eky biasa pake bahasa pemprograman apa?
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

eky

delphi,php yang masih lumayan ingat
java dah sedikit lupa .. hehe
pengen belajar matlab ahhhh ....

Mtk Kerajaan Mataram

Terima kasih saudara Ihsan,
saya sudah mencoba kode njenengan dengan visual basic pada macro di excel dengan obyek2 :
Commandbutton1, Textbox1,Textbox2, dan Label1
Dan hasilnya cocok...sbb :

Private Sub CommandButton1_Click()
Dim sText, cText As String
sText = TextBox1.Text
cText = TextBox2.Text
If sText = "" Then
    MsgBox "Kata pertama belum ditulis."
    Exit Sub
ElseIf sText = "" Then
    MsgBox "Kata kedua belum ditulis."
    Exit Sub
End If
If InStr(sText, cText) Then
     Label1.Caption = "tersisip"
Else
     Label1.Caption = "tidak tersisip"
End If
End Sub

Terima kasih amat.

eky


insan sains

^_^ Wah.. syukurlah...

Coba dong dikembangin lebih jauh, seperti :
- gimana membedakan case-sensitive dan yang tidak case-sensitive
- dalam sebuah kalimat ditemukan berapa kata yang dicari
- gimana caranya mengganti sebuah kata yang dicari dengan kata penggantinya

Tools-tools kayak gini bisa dijual loh...!! kekeke.. sapa tahu ada yg mata duitan.....

ayo.. ayo... dilanjutkan....
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

eky

Kutip dari: insan sains pada Agustus 10, 2008, 02:02:14 AM
Coba dong dikembangin lebih jauh, seperti :
- gimana membedakan case-sensitive dan yang tidak case-sensitive
- dalam sebuah kalimat ditemukan berapa kata yang dicari
- gimana caranya mengganti sebuah kata yang dicari dengan kata penggantinya
bukannya klo ngebuat ini, udah ada di bahasa pemrogramannya ..???
tinggal pake doang kan? jadi kayaknya ga terlalu bermain di algoritma ...  ya ga>??

Mtk Kerajaan Mataram

Thank you,
Sebenarnya ini sedang menyempurnakan program saya berupa mesin pencarian, termasuk komputasinya. Sebelumnya saya menggunakan algoritma sendiri untuk kasus yg saya tanyakan tsb,yaitu :

Function Termuat(Kal1 As String, Kal2 As String) As Integer
Dim Pjg1, Pjg2, I, j, k, L, bERKURANG(), jbERKURANG As Integer
Dim Hf1(), Hf2(), Kata1, Kata2 As String
Dim Cocok, H, hIT(), sELhIT(), jsELhIT As Integer
On Error Resume Next
Pjg1 = Len(Trim(Kal1))
Pjg2 = Len(Trim(Kal2))
ReDim Hf1(Pjg1)
ReDim Hf2(Pjg2)
ReDim hIT(Pjg1)
ReDim sELhIT(Pjg1)
ReDim bERKURANG(Pjg1)
If Pjg2 <= Val(Text3.Text) Then
If Pjg1 <= Pjg2 Then
    Kata1 = Trim(Kal1)
    Kata2 = Trim(Kal2)
    For I = 1 To Pjg1
         Hf1(I) = Left(Right(Trim(Kata1), Pjg1 - I + 1), 1)
    Next I
    For I = 1 To Pjg2
         Hf2(I) = Left(Right(Trim(Kata2), Pjg2 - I + 1), 1)
    Next I
    Cocok = 0
    L = 0
    bERKURANG(0) = 0
    Do While Pjg1 >= 0
        k = 0
        L = L + 1
        For j = 1 To Pjg2
            If Hf1(1) = Hf2(j) Then
                hIT(L) = jbERKURANG + j
                k = k + 1
                H = j
                Exit For
            End If
        Next j
        If k = 0 And Not Trim(Kata1 = "") Then
            Termuat = 0
            Exit Do
        ElseIf Not Trim(Kata1) = "" Then
            Kata1 = Right(Trim(Kata1), Pjg1 - 1)
            Kata2 = Right(Trim(Kata2), Pjg2 - H)
            Pjg1 = Len(Kata1)
            Pjg2 = Len(Kata2)
            bERKURANG(L) = bERKURANG(L - 1) + H
            jbERKURANG = bERKURANG(L)
            For I = 1 To Pjg1
                Hf1(I) = Left(Right(Trim(Kata1), Pjg1 - I + 1), 1)
            Next I
            For I = 1 To Pjg2
                Hf2(I) = Left(Right(Trim(Kata2), Pjg2 - I + 1), 1)
            Next I
            Cocok = Cocok + k
        Else
            Exit Do
        End If
    Loop
    If Cocok = Len(Kal1) Then
        jsELhIT = 0
        For I = 1 To Len(Kal1) - 1
            sELhIT(I) = hIT(I + 1) - hIT(I)
            jsELhIT = jsELhIT + sELhIT(I)
        Next I
        If jsELhIT = Len(Kal1) - 1 Then
            Termuat = 1
        Else
            Termuat = 0
        End If
    End If
Else
    Termuat = 0
End If
Else
    Termuat = 0
End If
End Function

   Dan ternyata kode ini belum mencakup semua komposisi yang mungkin, ehh ternyata hanya pakai fungsi Instr dari saudara Insan dan lebih ngirit. Saya dalam fasilitas di visual basic memang masih kurang.

insan sains

@Mtk Kerajaan Mataram
Nanti kalo udah jadi, bagi2 yach hasil projectnya...!!!  ;D
Inget kata mesin pencari, jadi inget google. Dia punya algoritma khusus tuh buat nyari dari milyaran data yang bertebaran dimana-mana, tapi bisa ditampilkan dalam sekejap... ck.. ck.. ck... huebatlah..

@eky
Kalo fasilitas searching yang ada di pemprograman itu sendiri hanya berlaku untuk script yang kita tulis saja, gak bisa general untuk mencari sebuah kata dalam dokumen apapun. Yang Mtk Kerajaan Mataram maksud adalah membuat fasilitas searching yang dedicated. Banyak kok tools-tools kayak gini yang dijual, yang saya tahu sih Search And Replace. Bagus banget tuh fitur-fitur yang ada didalemnya.

Banyak pengembangan aplikasi untuk model pencarian seperti ini. COntohnya, mesin pencari seperti google (walaupun kek nya masih jauh dalam hal kecepatan). Kemudian, bisa juga untuk kompresi file..!! Temen saya pernah ada yang bikin format file kompresi sendiri, dasarnya ya ini, pencarian karakter tertentu kemudian di ganti dengan karakter yang bitnya lebih kecil. Jika ingin di extract kembali, tinggal dibalik aja prosesnya. Hasilnya luar biasa, terutama untuk file gambar, ukuran filenya bisa berkurang berlipat-lipat.
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

eky

Kutip dari: insan sains pada Agustus 10, 2008, 11:37:53 AM
@Mtk Kerajaan Mataram
Nanti kalo udah jadi, bagi2 yach hasil projectnya...!!!  ;D
Inget kata mesin pencari, jadi inget google. Dia punya algoritma khusus tuh buat nyari dari milyaran data yang bertebaran dimana-mana, tapi bisa ditampilkan dalam sekejap... ck.. ck.. ck... huebatlah..
yang dimaksud sekejap di sini bukan berarti google ngesearch ke setiap database web di seluruh dunia pada saat kita mengetikkan keyword pada google. Google kan sebenarnya punya semacam spider (lupa nama lengkap spidernya apa) yang menjaring semua web yang ada di dunia ke dalam database google untuk disimpan. nah pada saat kita mengetikkan keyword pada google, google mencari pada databasenya dia, bukan ke seluruh dunia dalam sekejap .. :D