ネットで面白そうな文章を発見。さっそくコピペしてテキストファイルとして保存。ところが行頭や行末に不必要なスペースが・・・。これを手作業で除去するのは地味に面倒くさい。そこで行頭や行末のスペースなどを除去するプログラムを作成してみました。
やることは
選択行を作業用のSyncRichTextBoxにコピー。
改行を探す。
その前、後の文字はスペース等(半角、全角スペース、タブ文字)かどうかを調べて必要なら取り除く
Undo、Redo、複数のRichTextBoxのデータ同期にも対応しています。
行頭の空白文字を取り除くメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
public partial class SyncRichTextBox : UserControl { public void RemoveHeadSpace() { List<int> vs = GetSelectedLineHeads(); int start = vs.Min(); int len = GetSelectedLineTail() - start; SelectionStart = start; SelectionLength = len; SyncRichTextBox sync = new SyncRichTextBox(); sync.richTextBoxEx1.SelectedRtf = richTextBoxEx1.SelectedRtf; sync.richTextBoxEx1.SelectAll(); List<int> vs1 = sync.GetSelectedLineHeads(); List<Spaces> SpacesList = new List<Spaces>(); foreach (int head in vs1) { int i = 0; while (true) { sync.richTextBoxEx1.Select(head + i, 1); string str = sync.SelectedText; if (str != " " && str != "\t" && str != " ") break; i++; } if (i != 0) { sync.richTextBoxEx1.Select(head, i); Spaces s = new Spaces(); s.start = head; s.len = i; SpacesList.Add(s); } } var list = SpacesList.OrderByDescending(x => x.start).ToList(); foreach (var obj in list) { sync.richTextBoxEx1.Select(obj.start, obj.len); sync.richTextBoxEx1.SelectedText = ""; } sync.richTextBoxEx1.SelectAll(); string rtf = sync.richTextBoxEx1.SelectedRtf; sync.richTextBoxEx1.Dispose(); sync.Dispose(); SetSelectedRtf(rtf, "RemoveHeadSpace"); } } |
これは行末の空白文字を取り除くメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
public partial class SyncRichTextBox : UserControl { public void RemoveTailSpace() { List<int> vs = GetSelectedLineHeads(); int start = vs.Min(); int len = GetSelectedLineTail() - start; SelectionStart = start; SelectionLength = len; SyncRichTextBox sync = new SyncRichTextBox(); sync.richTextBoxEx1.SelectedRtf = richTextBoxEx1.SelectedRtf; sync.richTextBoxEx1.SelectAll(); System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("\n"); var match = reg.Matches(sync.richTextBoxEx1.SelectedText); List<int> tails = new List<int>(); foreach (System.Text.RegularExpressions.Match m in match) { tails.Add(m.Index); } int textlen = sync.richTextBoxEx1.Text.Length; if (!tails.Any(x => x == textlen)) tails.Add(textlen); List<Spaces> SpacesList = new List<Spaces>(); foreach (int tail in tails) { int i = 1; while (true) { sync.richTextBoxEx1.Select(tail - i, 1); string str = sync.SelectedText; if (str != " " && str != "\t" && str != " ") break; i++; } i--; if (i != 0) { sync.richTextBoxEx1.Select(tail - i, i); Spaces s = new Spaces(); s.start = tail - i; s.len = i; SpacesList.Add(s); } } var list = SpacesList.OrderByDescending(x => x.start).ToList(); foreach (var obj in list) { sync.richTextBoxEx1.Select(obj.start, obj.len); sync.richTextBoxEx1.SelectedText = ""; } sync.richTextBoxEx1.SelectAll(); string rtf = sync.richTextBoxEx1.SelectedRtf; sync.richTextBoxEx1.Dispose(); sync.Dispose(); SetSelectedRtf(rtf, "RemoveTailSpace"); } } |