コマンドラインをぶった切る(手抜き)
よいこはまねしません
private static bool TrySplit(string cl, out Listls) { ls = new List (); var rv = ls; var status = 0; var sb = new StringBuilder(); var fa = new Action [] { c => { if (!char.IsWhiteSpace(c)) { sb.Append(c); status = c.Equals('"') ? 2 : 1; } }, c => { if (char.IsWhiteSpace(c)) { rv.Add(sb.ToString()); sb.Clear(); status = 0; } else { if (c.Equals('"')) { rv.Add(sb.ToString()); sb.Clear(); status = 2; } sb.Append(c); } }, c => { if (char.IsWhiteSpace(c)) { rv.Add(sb.ToString()); sb.Clear(); status = 0; } else { sb.Append(c); if (c.Equals('"')) { rv.Add(sb.ToString()); sb.Clear(); status = 0; } } } }; foreach (var c in cl) fa[status](c); if (status == 1) { rv.Add(sb.ToString()); sb.Clear(); } return status != 2; }
■[買い物]
今まで使ってたのは…2003/11/03とか http://d.hatena.ne.jp/Edelweiss/20031103/p3
■[C#]
ソース
using System; class Test { static void Main() { var m0 = (1e16m + 9m) / ulong.MaxValue; var m1 = (1e16m + 10m) / ulong.MaxValue; Console.WriteLine("m0 = {0:e25}", m0); Console.WriteLine("m1 = {0:e25}", m1); Console.WriteLine("m1 > m0 = {0}", m1 > m0); var d0 = decimal.ToDouble(m0); var d1 = decimal.ToDouble(m1); Console.WriteLine("d0 = {0:e17}", d0); Console.WriteLine("d1 = {0:e17}", d1); Console.WriteLine("d1 >= d0 = {0}", d1 >= d0); } }
実行♪
m0 = 5.4210108624275270492409140e-004 m1 = 5.4210108624275275913420000e-004 m1 > m0 = True d0 = 5.42101086242752760e-004 d1 = 5.42101086242752650e-004 d1 >= d0 = False
…え˝
Blog
とりあえず登録しておく