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] ( [ ] 内を追加)
ソースコード
このソースコード化ではC言語用なのかVisual Basicにはあまり対応していないようです。ご自分でコピペしてみてください。
" ' "でコメントアウトしてあるように、[Case]文はなるべく使わず[if]文を使うことをお勧めします
こんな画面になります。コンポーネントの配置にもお使いください(タブは「変換後」つまりTextbox2が見えている状態ですが、「変換前」タブのTextbox1も同じような配置です)。ちなみにこれは、上にのせたソースコードの変換後です。約16秒でした。サイトに比べるととても遅いですが、使う分には問題ありません。
ソースコードを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() {""", "&", "'", "<", ">"} 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("<") ' Case ">" ' TextBox2.AppendText(">") ' Case """" ' TextBox2.AppendText(""") ' Case "&" ' TextBox2.AppendText("&") ' Case "'" ' TextBox2.AppendText("'") ' 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秒でした。サイトに比べるととても遅いですが、使う分には問題ありません。