- Back to Home »
- Umum »
- Fungsi Spin Text Pada VB.NET
Posted by : Belajar Mengelola Keuangan
Feb 22, 2018
Biasanya teknik ini digunakan oleh para blogger
Tidak perlu berlama-lama lagi, ini kodenya dalam bahasa VB.NET.
Function GetRandomSequence(ByVal sample As String) As String GetRandomSequence = Nothing Try Static R As New Random Dim SB As New System.Text.StringBuilder Dim InSet As Boolean = False Dim Values As New List(Of List(Of String)) Dim CurSet As New List(Of String) For i As Integer = 0 To sample.Length - 1 Select Case sample.Substring(i, 1) Case "{" If Not InSet Then If SB.Length > 0 Then CurSet.Add(SB.ToString) Values.Add(CurSet) CurSet = New List(Of String) SB.Clear() End If InSet = True Else ' Reached an Open Set Marker but we were ALREADY in a Set Return "Duplicate Opening Marker Found: " & sample End If Case "}" If InSet Then If SB.Length > 0 Then CurSet.AddRange(SB.ToString.Split("|")) Values.Add(CurSet) CurSet = New List(Of String) SB.Clear() Else ' Reached a Close Set Marker but NOTHING was BETWEEN the Markers Return "Empty Set Between Markers Found: " & sample End If InSet = False Else ' Reached a Close Set Marker but we were NOT in a Set Return "Missing Opening Marker: " & sample End If Case Else SB.Append(sample.Substring(i, 1)) End Select Next If SB.Length > 0 Then If Not InSet Then CurSet.Add(SB.ToString) Values.Add(CurSet) Else ' End of Sample Reached and Set was NOT closed Return "Missing Closing Marker: " & sample End If End If Dim output As New List(Of String) For Each valueSet As List(Of String) In Values output.Add(valueSet(R.Next(0, valueSet.Count))) Next Return String.Join("", output.ToArray) Catch ex As Exception Debug.Print(Date.Now & " GetRandomSequence error " & ex.Message) End Try End FunctionCara pakainya, kalimat yang mau di spin katanya harus diapit oleh tanda { dan }. Jadi {kata 1|kata 2|kata 3|kata ...}.
Contohnya
Dijual {cepat|BU|Butuh Uang}, Rumah {LB:36m|Luas Bangunan 36m|Tipe 36} {LT:50m|luas tanah 50m} Harga {Murah|Nego|Bersahabat}
Nanti fungsi di atas bisa membuat variasi kalimat seperti di bawah ini:
- Dijual cepat, Rumah Tipe 36 LT:50m Harga Nego
- Dijual BU, Rumah LB:36m Luas tanah 50m Harga Murah
- Dijual Butuh Uang, Rumah Luas Bangunan 36m LT: 50m Harga bersahabat
- dst
OK sekarang ke bagian kedua. Bagaimana bila Anda ingin membuat kalimat tersebut lebih unik lagi? Salah satu caranya adalah dengan menambahkan tanda { dan } di dalam { dan }. Hal ini biasanya disebut dengan nested spin.
Contohnya
Dijual {cepat|BU|Butuh Uang}, Rumah {{LB|Luas Bangunan}:36{m|m2|meter persegi}|{LB|Luas Bangunan} 36{m|m2|meter persegi}|Tipe 36} {LT:50m|luas tanah 50m} Harga {Murah|Nego|Bersahabat}.
Bila Anda memakai fungsi di atas, maka tidak akan berhasil dan akan keluar pesan error:
Duplicate Opening Marker Found
Lalu bagaimana cara menyiasatinya?
Gunakan kode di bawah ini, tetapi kode ini tidak memusingkan soal performa ya..
Imports System.Text.RegularExpressions Private rand As New Random() Function RandomReplacement(ByVal m As Match) As String Dim matchedText As String = m.Value.Substring(1, m.Value.Length - 2) ' Skip { and } Dim delimiter() As Char = {"|"c} Dim choices() As String = matchedText.Split(delimiter) Dim randomIndex As Integer = rand.Next(choices.Length) Return choices(randomIndex) End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim pattern As String = "\{[^{}]*\}" ' Any set of braces that do not contain other braces Dim m As Match = Regex.Match(TextBox1.Text, pattern) Dim result As String = TextBox1.Text While m.Success result = Regex.Replace(result, pattern, AddressOf RandomReplacement) m = Regex.Match(result, pattern) End While Label1.Text = result End SubKode kedua, memakai fungsi regex untuk memanipulasi string. Nanti kalau ada waktu saya akan membahas tentang regex ini. Jadi sampai jumpa di artikel berikutnya.
Apakah kamu ingin mendapatkan perberitahuan tentang artikel yang baru dari catatanvbnet.blogspot.com langsung ke emailmu?