趣味なのだが、82年からぼつぼつ小説を書いている。
知人の同人誌くらいにしか載った事がないのだけど。
最近は小説投稿サイト「小説家になろう」を利用している事が多い。一応、ライフワークなテーマもあったりして。
ところで、自サイトで原稿管理していた頃の違い、今は一話ごとにテキスト管理している事が多い。
いち作品ごとのフォルダがあり、 ram-001.txt みたいなのが並んでいて、ram-setting.txt だったら設定、みたいな感じだ。
この番号管理っていうか「新しい番号ファイルを作るの自動化したいな」ってのがありまして。
いや、わりと毎日更新とかしていると面倒なんですよ、いやマジで。
Rubyで書けばいいんでしょうけど、天邪鬼なんで、C#で書いてみました。
いやー雑品ですねえ。
まぁ、Visual Studio 2010 C# Express あたりでコンソールプロジェクト作って、これぶっこんでコンパイルすれば、まんま使えるかと。
using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Text; namespace novelc { class Program { static string getNovname(string fn) { string r = fn; r = Regex.Replace(r, @"\-\d{1,9}\.txt$", ""); return (r); } static string getNumberFromFilename(string fn) { string r = fn; r = Regex.Replace(r, @"^.+\-(\d{1,9})\.txt$", "$1"); return (r); } static string filefilter(string fn) { string r = fn; r = Regex.Replace(r, @"^\.\\", ""); return (r); } static void fileWrite(string fn, string str) { // ファイルにテキストを書き出し。 using (StreamWriter w = new StreamWriter(@fn)) { w.Write(str); } } static void makeFile(string fn) { fileWrite(fn, ""); } static void Main(string[] args) { bool debug = false; bool newone = false; // 新規作成するか? for (int i = 0; i < args.Length; i++) { if (Regex.IsMatch(args[i], @"\-new$", RegexOptions.IgnoreCase) == true) { newone = true; } else if (Regex.IsMatch(args[i], @"\-debug$", RegexOptions.IgnoreCase) == true) { debug = true; } if (debug == true) { Console.WriteLine("#..param{0}:{1}", i, args[i]); } } string mnumber = "0"; string number = "0"; Hashtable oo = new Hashtable(); Console.WriteLine(Directory.GetCurrentDirectory()); foreach (String f in Directory.GetFileSystemEntries(".")) { if (File.GetAttributes(f) == FileAttributes.Directory) { //Console.WriteLine("D: {0}", f); } else { //Console.WriteLine("F: {0}", f); string ff = filefilter(f); if(Regex.IsMatch(ff,@"\-\d{1,5}\.txt$", RegexOptions.IgnoreCase) == true){ oo[getNovname(ff)] = ff; number = getNumberFromFilename(ff); if (int.Parse(number) > int.Parse(mnumber)) { mnumber = number; } if (debug == true) { Console.WriteLine("{0}", ff); } } } } string zp = ""; foreach (string x in oo.Keys) { Console.WriteLine("File形式発見: {0}-数字.txt", x); zp = x; } if (oo.Count == 0) { Console.WriteLine("むむ、「識別名-番号.txt」形式の原稿が存在しないようです。"); } else if (oo.Count > 1) { Console.WriteLine("おや、それっぽい識別コードが{0}種類あります。問題の元になるので統一すべきかも。", oo.Count); } else { string newfile = zp + "-" + (int.Parse(mnumber) + 1).ToString("D3") + ".txt"; Console.WriteLine("最大値は、{0}です。\n次を作るなら、{1}になります。(-new オプションで作成できます)", mnumber, newfile); if (newone == true) { Console.WriteLine("新規作成します。{0}",newfile); if (System.IO.File.Exists(newfile) == true) { Console.WriteLine("そのファイル({0})は存在しますので処理中断します。", newfile); } else { makeFile(newfile); Console.WriteLine("新ファイル({0})を作成しました。", newfile); } } } if (debug == true) { Console.WriteLine("終了です(何かキーをおしてください)"); Console.ReadKey(); } } } }