文章目录
- 需求分析
- C#代码UI设计
txt阅读器系列:
- 需求分析和文件读写
- 目录提取类💎列表控件与目录
- 字体控件绑定💎前景/背景颜色
- 书籍管理系统💎用树形图管理书籍
- 语音播放💎播放进度显示💎快进快退💎语速音量
- 快捷键翻页
需求分析
网络上的TXT文件,质量良莠不齐,有一些从PDF等格式转化而来,或者干脆通过OCR扫描得到的文本文档,在排版上也有着硬伤。所以,作为一个txt阅读器,具备简单的文本清洗功能是竞争力的体现。
接下来拟实现如下功能
清理空格的目的是将行首和行尾的空格去除;段落拼接主要解决PDF转txt后,在中间断行的问题;去除空行主要是把多于一行的空行转为一行空行。
文本替换无需多言,编码更改则是考虑到因为编码不同可能导致乱码的情况,这里提供两个功能,一种是换一种编码重新打开,另一种是将文本文件另存为其他编码格式。
UI代码
其xaml
代码为
<Expander DockPanel.Dock="Top" Header="文本清洗">
<StackPanel>
<DockPanel LastChildFill="True">
<Button Content="执行" Width="50" DockPanel.Dock="Right"/>
<UniformGrid Columns="3">
<CheckBox Content="清理空格" Margin="5"/>
<CheckBox Content="段落拼接" Margin="5"/>
<CheckBox Content="去除空行" Margin="5"/>
</UniformGrid>
</DockPanel>
<DockPanel LastChildFill="True">
<TextBlock Text="文本替换" Width="50" DockPanel.Dock="Left"/>
<CheckBox Content="正则表达式" Margin="5" DockPanel.Dock="Right"/>
<TextBox Height="20"/>
</DockPanel>
<DockPanel LastChildFill="True">
<TextBlock Text="➠➠➠➠" Width="50"/>
<Button Content="替换" Width="50" DockPanel.Dock="Right"/>
<TextBox Height="20"/>
</DockPanel>
<DockPanel LastChildFill="True">
<TextBlock Text="编码更改" Width="47"/>
<Button Content="另存" Width="50" DockPanel.Dock="Right"/>
<Button Content="重载" Width="50" DockPanel.Dock="Right"/>
<ComboBox/>
</DockPanel>
</StackPanel>
</Expander>
C#代码UI设计
清理空格、段落拼接还有去处空行是三个单选框,本着压缩代码的原则,这三个CheckBox
可以写在一起,由C#的初始化代码统一给出。
首先,将这这些布局代码改为
<DockPanel LastChildFill="True">
<Button Content="执行" Width="50" DockPanel.Dock="Right"/>
<UniformGrid Columns="3" x:Name="ufgCheckBoxes"/>
</DockPanel>
然后在C#
中新建全局变量
static readonly string[] FMT_METHOD = new string[] { "清理空格", "段落拼接", "去除空行" };
CheckBox[] fmtCheckBoxes = FMT_METHOD.Select(
s => new CheckBox(){ Content = s, Margin = new Thickness(5) }).ToArray();
其中,FMT_METHOD是一个字符串数组,无需多言;fmtCheckBoxes是用数组生成的一个CheckBox数组。
接下来在窗口的构造函数MainWindow中添加下面的代码,表示将fmtCheckBoxes中所有CheckBox添加到ufgCheckBoxes,从而在布局上达到和此前一样的效果。
foreach (var ch in fmtCheckBoxes)
ufgCheckBoxes.Children.Add(ch);