- 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 Function
Cara 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 Sub
Kode 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?
