x01.TextProc: 两三分钟完成的一个小工具
在工作中,遇到这么个问题,需要将 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=""
Width=""
WindowStartupLocation="CenterScreen">
<StackPanel>
<ScrollViewer
Height=""
VerticalScrollBarVisibility="Auto">
<TextBox
Name="txtContent"
Margin="" />
</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 = ; i < cs.Length; i++) {
if (cs[i] < '' || cs[i] > '') 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 这两个巨无霸来临之际,作为编程爱好者,不要忘了,编程是为了解决问题这一本质,是为记。
我也是醉了,Ctl + H 即可解决,竟然写了个程序!之所以如此,是因为我几乎从来不用 Ctl+H 来全部替换:一不小心改了不该改的数据,在单位可不是小问题。
解决问题的方法从来都不是一种,还是予以保留吧,因为我的出发点是解决 Excel 问题,并不一定要操作 Excel。
x01.TextProc: 两三分钟完成的一个小工具的更多相关文章
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
- 提高Scrum站会效率的一个小工具
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:提高Scrum站会效率的一个小工具.
- Windows PE 第一章 熟悉OD(顺便破解一个小工具)
熟悉OD(顺便破解一个小工具) 上一节了解了OD的简单使用,这次就练习下,目标是破解一款小软件(入门练手用的,没有壳什么的). 首先我们来看一下这个小软件: 我们的目的是输入任何字符串都可以成功注册, ...
- [LeetCode]29 两数相除和一个小坑点
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- C# 基础知识系列- 17 实战篇 编写一个小工具(1)
0. 前言 这是对C# 基础系列的一个总结,现在我们利用之前学到的知识做一个小小的工具来给我们使用. 如果有看过IO篇的小伙伴,应该有印象.当时我提过一个场景描述,我们在平时使用系统的时候,经常会为了 ...
- 分享一个小工具:Excel表高速转换成JSON字符串
在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...
- 介绍两个Ubuntu上的桌面小工具
经常使用Windows10,Sticky Notes和壁纸自动切换功能挺好用的.我经常会使用Sticky Notes来记录一些信息,内容是实时保存的,而且启动的时候会自动显示在桌面上.其实Ubuntu ...
- 一个小工具 TcpTextListener
项目地址 : https://github.com/kelin-xycs/TcpTextListener 这是一个 可以 监听 Tcp (Http) 传输数据 的 小工具 . 不是 抓包 .不要 ...
- 基于Asp.net core + EF + Sqlite 5分钟快速上手一个小项目
虽然该方法不会用在实际开发中,但该过程对于初学者还是非常友好的,真应了麻雀虽小,五脏俱全这句话了.好了不多废话了,直接开始!! 1.建立一个名为test的Asp.net core web应用程序 这一 ...
随机推荐
- ajax配合一般处理程序(.ashx)登录的一般写法
前端: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> ...
- 创建javaScript对象的方法
一.工厂模式 function person (name,age) { var p=new Object(); p.name=name; p.age=age; p.showMessage=functi ...
- jenkins中使用tfs插件做增量的版本发布部署
一 配置介绍 使用jenkins的tfs插件进行,源码的下载,编译,打包的操作,然后使用windows的批处理命令,在局域网内(或者本机)把打包的release包,删除掉web.config,然后靠配 ...
- JavaScript进阶之this
javascript的this,一个不知道究竟属于谁的东西 this是一个大利器,用好了就可以帮我们省掉很多事,然而事实上却总是让我们出错.自己就吃过很大的亏.现在咱们就来扒一扒this究竟是什么. ...
- Unity3D 5.x 简单实例 - 脚本编写
1,Vector3 类型变量存储向量坐标值 Vector3.forward Vector3(0,0,1) Vector3.up Vector3(0,1,0) Vector3.right Vector3 ...
- 初识Java
Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...
- stm32 usart 异步传输示例
STM32F103xE的USART异步数据传输示例 USART全称Universal Synchronous/Asynchronous Receiver/Transmitter,是一种可以进行同步/异 ...
- ABP之Javascript生成
还是服务 在调试SimpleTaskSystem的AngularJs demo时,一开始我只看到对服务的应用. app.controller(controllerId, [ '$scope', 'ab ...
- 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!
一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目: 二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...
- c#使用json接口
前些日子将项目由使用数据库改版为使用接口,由于接口返回的xml中多了一些附加信息,导致xml转化后的DataTable无法储存在MemCache中.这时可以将xml序列化为其对应的类,当然由于当时对x ...