Download Sample |
Berawal saat presentasi di client, ada permintaan untuk membandingkan perbedaan antara 2 pasal dalam suatu peraturan, dengan maksud untuk melihat perubahan dari kedua pasal tersebut. Dari sinilah muncul ide untuk mencoba membuat aplikasi web yang dapat digunakan untuk membandingkan isi / konten dari 2 file. Dalam percobaan ini, saya menggunakan 2 TextFile (txt) yang saya isi dengan konten yang hampir mirip.
Di dalam aplikasi, saya buat sebuah folder (nama foldernya : “Files”) untuk menyimpan kedua textfile tersebut. Selanjutnya, di halaman default.aspx, saya tampilkan 2 textbox, 1 button dan 2 table untuk menampilkan hasilnya (seperti gambar diatas).
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <strong><span class="style1">Perbandingan isi antara 2 TextFile</span></strong><br /><br /> TextFile 1 : <asp:TextBox ID="TextBox1" runat="server" Width="300px"></asp:TextBox><br /> <br /> TextFile 2 : <asp:TextBox ID="TextBox2" runat="server" Width="300px"></asp:TextBox><br /> <br /> <asp:Button ID="Button1" runat="server" Text="OK" /><br /> <br /> <asp:Table ID="Table1" runat="server"> </asp:Table> <br /> <asp:Table ID="Table2" runat="server"> </asp:Table> </form> </body> </html>
Untuk dapat membandingkan isi / konten dari kedua textfile diatas, syarat utamanya adalah kita harus dapat membaca isi kedua textfile tersebut. Dari hasil googling, saya menemukan sebuah function yang dapat dipergunakan untuk membaca isi textfile. Function tersebut saya taruh di default.aspx.vb
Private Function ReadTextFile(ByVal FileName As String) As String Dim str As String = Nothing Dim objStreamReader As IO.StreamReader objStreamReader = File.OpenText(Server.MapPath(".\Files\") & FileName & ".txt") Dim contents As String = objStreamReader.ReadToEnd() 'str = contents.Replace(vbCrLf, "<br>") str = contents objStreamReader.Close() Return str End Function
Selanjutnya, saya buat perintah saat button di klik
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim str1 As String() = Nothing Dim str2 As String() = Nothing Dim st1 As String = Nothing Dim st2 As String = Nothing If Not TextBox1.Text = "" Then str1 = Split(ReadTextFile(TextBox1.Text)) End If If Not TextBox2.Text = "" Then str2 = Split(ReadTextFile(TextBox2.Text)) End If Dim sama As Boolean = False Dim sama2 As Boolean = False Dim sama3 As Boolean = False Dim sama4 As Boolean = False Dim tablerow As TableRow Dim tablecell As TableCell If str1.Length <> 0 Then If str2.Length <> 0 Then tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() tablecell.Text = "TextFile 1 : " & UCase(TextBox1.Text) & ".txt" tablerow.Controls.Add(tablecell) Table1.Controls.Add(tablerow) tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() tablecell.Text = "---------------------------" tablerow.Controls.Add(tablecell) Table1.Controls.Add(tablerow) tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() Dim s As Integer = 0 Do Until s = str1.Length st1 = str1(s).ToString.Trim Dim n As Integer = 0 Do Until n = str2.Length If Trim(LCase(st1)).ToString = Trim(LCase(str2(n))).ToString Then sama = True Exit Do Else sama = False End If n += 1 Loop If sama = True Then tablecell.Text += Trim(st1) & " " Else tablecell.Text += "<font color='red'>" & Trim(st1) & "</font>" & " " End If s = s + 1 Loop tablerow.Controls.Add(tablecell) Table1.Controls.Add(tablerow) tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() tablecell.Text = "" tablerow.Controls.Add(tablecell) Table2.Controls.Add(tablerow) st1 = Nothing st2 = Nothing tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() tablecell.Text = "TextFile 2 : " & UCase(TextBox2.Text) & ".txt" tablerow.Controls.Add(tablecell) Table2.Controls.Add(tablerow) tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() tablecell.Text = "---------------------------" tablerow.Controls.Add(tablecell) Table2.Controls.Add(tablerow) tablerow = New TableRow tablerow.Controls.Clear() tablecell = New TableCell tablecell.Controls.Clear() s = 0 Do Until s = str2.Length st2 = str2(s).ToString.Trim Dim n As Integer = 0 Do Until n = str1.Length If Trim(LCase(st2)).ToString = Trim(LCase(str1(n))).ToString Then sama = True Exit Do Else sama = False End If n += 1 Loop If sama = True Then tablecell.Text += Trim(st2) & " " Else tablecell.Text += "<font color='red'>" & Trim(st2) & "</font>" & " " End If s = s + 1 Loop tablerow.Controls.Add(tablecell) Table2.Controls.Add(tablerow) End If End If End Sub
Untuk mencobanya, jalankan aplikasi tersebut diatas, kemudian isikan nama textfile yang ada di dalam folder “Files” (tanpa extension). Kemudian klik button OK. Bila berhasil, maka hasilnya kurang lebih adalah seperti ini :
Semoga bermanfaat.
***
Wahh repot juga ya… kalau di PHP dan *nix ada diff.
Jadi kalau untuk membandingkan dua atau lebih text atau gambar nggak sepanjang itu code-nya
Mungkin di ASP.Net sudah ada, cuma belum ter-explore.
Makasih atas infonya mas.. saya jadi penasaran nich.. 😀 Ntar saya oprek-oprek dulu deh… yang jelas saya emang belum explore sampai detil… semoga di asp.net juga ada yang kayak di PHP.