- 追加された行はこの色です。
- 削除された行はこの色です。
* ちょこっとコード集 [#x9d5d01f]
#contents
** cpp/hppの命名ルール変更時のコード [#n41b29ba]
#code(csharp){{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace MemberPropertyNameChanger
{
class Program
{
static void Main(string[] args)
{
Exec(new DirectoryInfo(args[0]));
}
static void Exec(DirectoryInfo aDir)
{
// 各ファイル
List<FileInfo> fileInfos = new List<FileInfo>();
fileInfos.AddRange(aDir.GetFiles("*.cpp"));
fileInfos.AddRange(aDir.GetFiles("*.hpp"));
foreach (var fileInfo in fileInfos)
{
// オープン
Console.WriteLine(fileInfo.FullName);
string text = File.ReadAllText(fileInfo.FullName, Encoding.GetEncoding("shift_jis"));
// 置き換え
text = System.Text.RegularExpressions.Regex.Replace(
text,
@"(?<pre>[^a-zA-Z0-9])(?<name>[a-z][A-Za-z0-9]+)_(?<post>[^a-zA-Z0-9])",
new System.Text.RegularExpressions.MatchEvaluator(NameChange)
);
// セーブ
File.WriteAllText(fileInfo.FullName, text, Encoding.GetEncoding("shift_jis"));
}
// 子ディレクトリ
foreach (var dirInfo in aDir.GetDirectories())
{
if (dirInfo.Name == ".svn")
{
continue;
}
Exec(dirInfo);
}
}
//MatchEvaluatorデリゲートメソッド
private static string NameChange(System.Text.RegularExpressions.Match m)
{
string name = m.Groups["name"].Value;
return m.Groups["pre"].Value + "m" + char.ToUpper(name[0]) + (1 < name.Length ? name.Substring(1) : "" ) + m.Groups["post"].Value;
}
}
}
}}