码迷,mamicode.com
首页 > 其他好文 > 详细

x01.TextProc: 两三分钟完成的一个小工具

时间:2015-07-29 18:47:00      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

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

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

技术分享
<?xml version="1.0" encoding="utf-8"?>
<Window
    x:Class="TextProc.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="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 这两个巨无霸来临之际,作为编程爱好者,不要忘了,编程是为了解决问题这一本质,是为记。

x01.TextProc: 两三分钟完成的一个小工具

标签:

原文地址:http://www.cnblogs.com/china_x01/p/4686409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!