C#初学乍练-文本替换工具命令行版

原创 2004年09月28日 11:09:00

该程序使用正则表达式进行文字替换,广度优先遍历子目录(基础知识很重要), 解决无法替换回车换行的问题
 class Replacee
 {
   
  /// <summary>
  /// 替换文件中字符
  /// </summary>
  /// <param name="fileFullName">文件全名</param>
  /// <param name="replacedBy">用于替换的字符串</param>
  /// <param name="findPattern">用于查找的字符串</param>
  /// <param name="isBackup">是否备份文件</param>
  private static void DoReplace(string fileFullName, string replacedBy, string findPattern, bool isBackup)
  {
   string result = string.Empty;
   string inputText = string.Empty;
   string replacement = replacedBy;
   string pat = findPattern;
   Regex r = new Regex(pat, RegexOptions.IgnoreCase);
  
   try
   {
    using (StreamReader sr = new StreamReader(fileFullName))
    {
     inputText = sr.ReadToEnd();
    }
     
    // Compile the regular expression.
    if (r.IsMatch(inputText))
    {
     if (isBackup == true)
     {
      try
      {
       File.Copy(fileFullName, fileFullName + ".bak");
      }
      catch(System.IO.IOException ex)
      {
       File.Copy(fileFullName, fileFullName + ".bak", true);
       Console.WriteLine(ex.Message);
      }
     }
     result = r.Replace(inputText, replacement);               
          
     // Add some text to the file.
     using (StreamWriter sw = new StreamWriter(fileFullName))
     {
      sw.Write(result);
     }
    }            
    Console.WriteLine(fileFullName);
   }
   catch (Exception e)
   {
           
    Console.WriteLine("The process failed: {0}", e.ToString());          
    //throw(e);
   }
  }
   
  /// <summary>
  /// 遍历目录
  /// </summary>
  /// <param name="path">起始路径</param>
  /// <param name="replacedBy">用于替换的字符串</param>
  /// <param name="findPattern">用于查找的字符串</param>
  /// <param name="isBackup">是否备份文件</param>
  /// <param name="isGetSubFloder">是否获取子文件夹</param>
  public static void TravelReplace(string path, string replacedStr, string findPattern, bool isBackup, bool isGetSubFloder)
  {
   Queue queue = new Queue();
   DirectoryInfo di = null;
   string subPath = string.Empty;
   string currentPath = string.Empty;
   FileSystemInfo[] dirs = null;

   queue.Enqueue(path);
   while (queue.Count > 0)
   {    
    currentPath = (string)queue.Dequeue();
    di = new DirectoryInfo(currentPath);
    
    //get files under current directiory
    FileSystemInfo[] files = di.GetFiles("*.sql");
    foreach (FileSystemInfo f in files)
    {
     DoReplace(f.FullName, replacedStr, findPattern, isBackup);    
    }

    // Get only subdirectories
    if (isGetSubFloder == true)
    {     
     dirs = di.GetDirectories();
     foreach (FileSystemInfo d in dirs)
     {
      subPath = d.FullName;
      queue.Enqueue(subPath);
      Console.WriteLine(subPath);      
     }
    }
   }
  }
 }
 
测试:
    Replacee.TravelReplace(@"E:/temp/ttt", "/r/n);", @"(/r/n){2,}/);", true, true);

Activity初学乍练

Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而...
  • qq_33391864
  • qq_33391864
  • 2017年06月19日 16:31
  • 88

PHP初学乍练

接触PHP也已经两个星期了,因为公司的需要不得已从java改到了PHP,想想语言都是相通的学吧就!在这两个星期中大概了解了PHP的基本语法,还参加了一些项目的功能实现,总结一下吧养成这个好的习惯。 ...
  • jiandan12214
  • jiandan12214
  • 2012年01月04日 17:14
  • 315

初学乍练WPF

WPF控件分类 在WPF中,控件的基类为Object,按照继承类的不同分为四类: 1.ContentControl——内容控件 继承自System.Windows.Contr...
  • dabusidexiaoqiang
  • dabusidexiaoqiang
  • 2012年08月23日 16:57
  • 1829

c#2.0写的一个文本替换命令行工具

using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions...
  • zj53hao
  • zj53hao
  • 2008年04月16日 16:01
  • 2226

boost::hash初学乍练,呵呵

昨天编译,安装好了boost,今天想小试一把。以前看了些书,都说STL里面缺少了hash,而boost::hash也基本确定进入C++0X的标准了,何不试一下boot::hash呢?浏览了一下boos...
  • sharpbladepan
  • sharpbladepan
  • 2006年02月12日 22:42
  • 7032

GrepWin:Win7下的文本替换工具

工作环境退回到Win7之后,内容查找功能非常不给力,推荐一个文本内容查找工具grepWin。...
  • wishchin
  • wishchin
  • 2017年01月09日 16:04
  • 1323

Android基础入门教程——4.1.1 Activity初学乍练

Android基础入门教程——4.1.1 Activity初学乍练 本节引言: 1.Activity的概念与Activity的生命周期图: 2.Activity/ActionBarActivity/A...
  • zpj779878443
  • zpj779878443
  • 2015年08月06日 15:12
  • 9309

Android循序渐进 - 4.1.1 Android四大组件之-Activity(初学乍练)

本节开始讲解Android的四大组件之一的Activity官方介绍: Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个...
  • aasum
  • aasum
  • 2015年10月17日 15:05
  • 204

利用正则表达式进行文本替换,编辑工具使用UE

利用正则表达式进行文本替换,编辑工具使用UE 测试文本如下: I HAVE A_DREAM@SS I HAVE A_GOOD_DREAM@S_T I HAVE A GOOD DREAM...
  • sych888
  • sych888
  • 2016年11月01日 21:50
  • 1454

Express教程(入门简单版)

Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express ...
  • SeaSunExpect
  • SeaSunExpect
  • 2017年08月03日 10:41
  • 547
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#初学乍练-文本替换工具命令行版
举报原因:
原因补充:

(最多只允许输入30个字)