SSブログ

Visual BasicでHTML特殊文字変換ソフト作ってみた [Visual Basic]

今回は、前回
ソースコードをSS-Blogブログに貼る
https://hrt-13856.blog.ss-blog.jp/2021-01-16-3
をしましたが、ここで、HTML特殊文字変換をしないといけないといいました。実際、そのサイトを見つけましたが 
https://tech-unlimited.com/escape.html
簡単にやりたいなーと思ったので、Visual Basicで作ってみました
かかる時間は、もっとかかりますが、オフラインでもできます(でもブログするにはオンラインでやるから…)


参考
プログレスバーが徐々に伸びるのを無効にする
https://dobon.net/vb/dotnet/control/pbdisableanimation.html


コンポーネントは、出てくるやつを貼っておけばOKですが、いちよう書いておきます
コンポーネント 名前 位置
Button1 開始 左上
Button2 ファイルを読み込み 今は機能なし なくてもいい
Button3 ファイルを保存  今は機能なし なくてもいい
Button4 停止 Button1と重ねて最背面に移動

タブコントロール1 真ん中に   ★
index
・1 変換前 Backcolorを「システム」の「コントロール」にする
・2 変換後 Backcolorを「システム」の「コントロール」にする

Textbox1 タブ1「変更前」に貼り付け ★
Textbox2 タブ2「変更後」に貼り付け ★

プログレスバー1 上部に入れる Anchorは Top, Left, [Right] ( [ ] 内を追加)

★がついているもののAnchorは Top, [Bottom], Left, [Right] ( [ ] 内を追加)

ソースコード
Public Class Form1
    '変換ボタンの下に 停止ボタンがある
    Private canceled As Boolean = False
    Dim string1 As String() = New String() {"""", "&", "'", "<", ">"}
    Dim string2 As String() = New String() {"&quot;", "&amp;", "&#039;", "&lt;", "&gt;"}
    Dim sw As System.Diagnostics.Stopwatch = System.Diagnostics.Stopwatch.StartNew()
    Private Sub 開始(sender As Object, e As EventArgs) Handles Button1.Click
        If Not (TextBox2.Text = "") Then
            If Not (MsgBox("今入っている変換後のデータはなくなります" & vbCrLf & "よろしいですか", vbOKCancel, "変換後のデータはなくなります") = vbOK) Then
                Exit Sub
            End If
        End If
        sw.Restart()
        canceled = False
        Button1.Hide()
        Button2.Enabled = False
        Button3.Enabled = False
        Button4.Show()
        TextBox2.Clear()
        Dim stringlen As Long = Len(TextBox1.Text)
        'Label1.Text = stringlen & "byteの文字列を変換中..."

        'MsgBox(stringlen)
        ProgressBar1.Maximum = stringlen
        For i As Long = 1 To stringlen
            Label1.Text = i & "/" & stringlen & "byte" & vbCrLf & "の文字列を変換中...(" & sw.Elapsed.ToString & ")"
            Application.DoEvents()
            'キャンセルボタンがクリックされたか調べる
            If canceled Then
                Label1.Text = i & "/" & stringlen & "byte" & vbCrLf & "の文字列を変換中に終了しました(" & sw.Elapsed.ToString & ")"
                Exit Sub
            End If
            If 0 <= Array.IndexOf(string1, Mid(TextBox1.Text, i, 1)) Then
                TextBox2.AppendText(string2(Array.IndexOf(string1, Mid(TextBox1.Text, i, 1))))
            Else
                TextBox2.AppendText(Mid(TextBox1.Text, i, 1))
            End If
            'Select Case Mid(TextBox1.Text, i, 1)
            '    Case "<"
            '        TextBox2.AppendText("&lt;")
            '    Case ">"
            '        TextBox2.AppendText("&gt;")
            '    Case """"
            '        TextBox2.AppendText("&quot;")
            '    Case "&"
            '        TextBox2.AppendText("&amp;")
            '    Case "'"
            '        TextBox2.AppendText("&#039;")
            '    Case Else
            '        TextBox2.AppendText(Mid(TextBox1.Text, i, 1))
            'End Select
            SetProgressBarValue(ProgressBar1, i)
            Label1.Refresh()
            ProgressBar1.Refresh()
        Next
        Button1.Show()
        Button2.Enabled = True
        Button3.Enabled = True
        Button4.Hide()
        Label1.Text = stringlen & "byte" & vbCrLf & "の文字列を変換しました(" & sw.Elapsed.ToString & ")"
        sw.Stop()
        sw.Reset()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        TextBox1.Multiline = True
        TextBox1.ScrollBars = ScrollBars.Both
        TextBox1.WordWrap = False
        TextBox2.Multiline = True
        TextBox2.ScrollBars = ScrollBars.Both
        TextBox2.WordWrap = False
        Button4.Enabled = True
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Button1.Show()
        Button2.Enabled = True
        Button3.Enabled = True
        Button4.Hide()
        canceled = True
    End Sub
    Private Sub SetProgressBarValue(pb As ProgressBar, val As Long)
        If pb.Value < val Then
            '値を増やす時
            If val < pb.Maximum Then
                '目的の値より一つ大きくしてから、目的の値にする
                pb.Value = val + 1
                pb.Value = val
            Else
                '最大値にする時
                '最大値を1つ増やしてから、元に戻す
                pb.Maximum += 1
                pb.Value = val + 1
                pb.Value = val
                pb.Maximum -= 1
            End If
        Else
            '値を減らす時は、そのまま
            pb.Value = val
        End If
    End Sub
End Class


このソースコード化ではC言語用なのかVisual Basicにはあまり対応していないようです。ご自分でコピペしてみてください。

" ' "でコメントアウトしてあるように、[Case]文はなるべく使わず[if]文を使うことをお勧めします

こんな画面になります。コンポーネントの配置にもお使いください(タブは「変換後」つまりTextbox2が見えている状態ですが、「変換前」タブのTextbox1も同じような配置です)。ちなみにこれは、上にのせたソースコードの変換後です。約16秒でした。サイトに比べるととても遅いですが、使う分には問題ありません。
HTML変換アプリ.PNG

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。