程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> x01.TextProc: 兩三分鐘完成的一個小工具,一門進球兩三個

x01.TextProc: 兩三分鐘完成的一個小工具,一門進球兩三個

編輯:C#入門知識

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="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 這兩個巨無霸來臨之際,作為編程愛好者,不要忘了,編程是為了解決問題這一本質,是為記。

我也是醉了,Ctl + H 即可解決,竟然寫了個程序!之所以如此,是因為我幾乎從來不用  Ctl+H 來全部替換:一不小心改了不該改的數據,在單位可不是小問題。

解決問題的方法從來都不是一種,還是予以保留吧,因為我的出發點是解決 Excel 問題,並不一定要操作 Excel。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved