日期:2014-05-18  浏览次数:21077 次

文本内容替换
有下列文本内容:
  年 月 日  
 1 12 3 17 22 0 0.0
  1.500000000000D+01
 2 12 3 18 4 0 0.0
  6.500000000000D+01
13 12 3 18 12 0 0.0
  4.300000000000D+01
 4 09 12 12 4 0 0.0
  7.400000000000D+01
 5 12 12 3 6 0 0.0
  2.600000000000D+01
 6 12 3 18 11 59 44.0
  0.000000000000D+00
37 12 3 18 2 0 0.0
  4.700000000000D+01
28 12 3 18 4 0 0.0
  4.900000000000D+01
 9 11 9 3 10 0 0.0
  3.600000000000D+01
10 12 3 18 4 0 0.0
  7.200000000000D+01
11 12 3 17 22 0 0.0
  5.700000000000D+01
12 12 3 22 10 0 0.0
  8.000000000000D+01
33 12 3 18 12 0 0.0
  3.200000000000D+01
14 12 3 18 12 0 0.0
  6.300000000000D+01
45 12 3 18 8 0 0.0
  4.300000000000D+01
16 12 3 19 11 59 44.0
  5.000000000000D+00
想以数组第一个值"12 3 17"转换为日期2012年3月17号后为基准,将文本中出现的12 3 17的改为11 1 1(日期2011年1月1号)。后面的"12 3 18"转换为日期后为2012年3月18日,与基准差1天,则文本中12 3 18改为11 1 2(日期2011年1月2号)。同理出现的"11 9 3"改的结果应该是(日期2011年1月1号)-其与基准的时间间隔.请教大师们该怎么做??

------解决方案--------------------
不就是个加减法吗? listdic.Add(s, i);//这句中的s改成s-减去或者加上你的基准时间,
参考我的回答
http://topic.csdn.net/u/20120612/13/342271d3-fc56-42d9-9c85-6ea262d901a1.html
------解决方案--------------------
C# code

string inputStr = @"
1 12 3 17 22 0 0.0
  1.500000000000D+01
 2 12 3 18 4 0 0.0
  6.500000000000D+01
13 12 3 18 12 0 0.0
  4.300000000000D+01
 4 09 12 12 4 0 0.0
  7.400000000000D+01
 5 12 12 3 6 0 0.0
  2.600000000000D+01
 6 12 3 18 11 59 44.0
  0.000000000000D+00
37 12 3 18 2 0 0.0
  4.700000000000D+01
28 12 3 18 4 0 0.0
  4.900000000000D+01
 9 11 9 3 10 0 0.0
  3.600000000000D+01
10 12 3 18 4 0 0.0
  7.200000000000D+01
11 12 3 17 22 0 0.0
  5.700000000000D+01
12 12 3 22 10 0 0.0
  8.000000000000D+01
33 12 3 18 12 0 0.0
  3.200000000000D+01
14 12 3 18 12 0 0.0
  6.300000000000D+01
45 12 3 18 8 0 0.0
  4.300000000000D+01
16 12 3 19 11 59 44.0
  5.000000000000D+00
"
    ;

Regex reg = new Regex(@"(\d{2} \d{1,2} \d{1,2})( \d{1,2} \d{1,2} \d{1,2}\.\d)");
DateTime firstDate = Convert.ToDateTime(reg.Match(inputStr).Groups[1].Value);
DateTime baseDate = new DateTime(2011, 1, 1);
TimeSpan ts = firstDate - baseDate;
string outputStr = reg.Replace(inputStr, new MatchEvaluator((m) =>
{
    return (Convert.ToDateTime(m.Groups[1].Value) - ts).ToString("yy M d") + m.Groups[2].Value;
}));
Console.WriteLine(outputStr);

/*
1 11 1 1 22 0 0.0
  1.500000000000D+01
 2 11 1 2 4 0 0.0
  6.500000000000D+01
13 11 1 2 12 0 0.0
  4.300000000000D+01
 4 08 9 27 4 0 0.0
  7.400000000000D+01
 5 11 9 19 6 0 0.0
  2.600000000000D+01
 6 11 1 2 11 59 44.0
  0.000000000000D+00
37 11 1 2 2 0 0.0
  4.700000000000D+01
28 11 1 2 4 0 0.0
  4.900000000000D+01
 9 10 6 19 10 0 0.0
  3.600000000000D+01
10 11 1 2 4 0 0.0
  7.200000000000D+01
11 11 1 1 22 0 0.0
  5.700000000000D+01
12 11 1 6 10 0 0.0
  8.000000000000D+01
33 11 1 2 12 0 0.0
  3.200000000000D+01
14 11 1 2 12 0 0.0
  6.300000000000D+01
45 11 1 2 8 0 0.0
  4.300000000000D+01
16 11 1 3 11 59 44.0
  5.000000000000D+00
*/