你的位置:首页 > ASP.net教程

[ASP.net教程]x01.TextProc: 两三分钟完成的一个小工具


在工作中,遇到这么个问题,需要将 Excel 表中类似 2134-1234-4456 的商品编号输入到单位的程序中,而程序只认 213412344456 这种没有 ‘-’ 的输入。数量比较多,一笔一笔的敲,费时费力不可取,所以转换一下,复制粘贴,不仅可以提高速度,而且也不易出错。并且,由于 Excel 表是别人提供,可能反复遇到此问题,所以写个转换的小工具是必要的。

直接操作 Excel 吗?问题 ”矮小下“,显然用不着这么麻烦。我的方法是,将商品编号列复制粘贴到记事本中保存为 temp.txt 文件。现在问题一下子就简化为普通的文本处理了。新建一个 WPF 程序,其 MainWindow.xaml 和 MainWindow.xaml.cs 内容如下:

<?"1.0" encoding="utf-8"?><Window  x:Class="TextProc.MainWindow" "http://schemas.microsoft.com/winfx/2006/xaml/presentation" "http://schemas.microsoft.com/winfx/2006/xaml"  Title="Text Proc"  Height="380"  Width="500"  WindowStartupLocation="CenterScreen">  <StackPanel>    <ScrollViewer      Height="300"      VerticalScrollBarVisibility="Auto">      <TextBox        Name="txtContent"        Margin="5" />    </ScrollViewer>    <StackPanel      Orientation="Horizontal"      HorizontalAlignment="Right">      <Button        Name="btnSelect"        Content="_Select" />      <Button        Name="btnProcess"        Content="_Process" />    </StackPanel>  </StackPanel></Window>

MainWindow.xaml
/** * MainWindow.xaml.cs (c) 2015 by x01 * ---------------------------------- */using System;using System.Collections.Generic;using System.IO;using System.Text;using System.Text.RegularExpressions;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using Microsoft.Win32;namespace TextProc{  /// <summary>  /// Interaction logic for Window1.xaml  /// </summary>  public partial class MainWindow : Window  {    string _path = null;    OpenFileDialog _dlg = new OpenFileDialog();        public MainWindow()    {      InitializeComponent();            _dlg.Filter = "*.txt|*.txt|*.*|*.*";            btnProcess.Click += delegate {         if (string.IsNullOrEmpty(_path)) return;        var text = File.ReadAllText(_path);        text = ProcessText(text);        txtContent.Text = text;        File.WriteAllText(_path + ".proc", text);        MessageBox.Show("Process Text Success!");      };            btnSelect.Click += delegate {         _dlg.ShowDialog();        _path = _dlg.FileName;        txtContent.Text = File.ReadAllText(_path);      };    }        // 主要的文本处理逻辑,换行作分割,只保留数字,可根据实际情况调整。    private string ProcessText(string text)    {      string [] arr = text.Split('\n');      List<string> result = new List<string>();      foreach (var a in arr) {        char[] cs = a.ToCharArray();        string s = string.Empty;        for (int i = 0; i < cs.Length; i++) {          if (cs[i] < '0' || cs[i] > '9') continue;          s += cs[i].ToString();        }        result.Add(s);      }            string str = string.Empty;      foreach (var r in result) {        str += r + "\n";      }      return str;    }  }}

MainWindow.cs

由于是在 XP 系统用 SharpDev 编写,所以 xaml 文件稍有不同。

处理后,再复制回 Excel 表中。花个两三分钟就解决了问题,还是不错的。

在 windows10 和 vs2015 这两个巨无霸来临之际,作为编程爱好者,不要忘了,编程是为了解决问题这一本质,是为记。