none
如何截取文本文件中的一部分保存到相应文件中. RRS feed

  • 问题

  • 已经有3个空文件,文件名分别为D0.8,D1.8,D2.8,如何把T02D0.8到%中的文本保存到D0.8文件中,T03D1.8~%,保存到D1.8文件中,T04D2.8~%保存到D2.8文件中.谢谢你的答复.
    T02D0.8
    .
    .
    .
    .
    .
    %
    T03D1.8
    .
    .
    .
    .
    .
    .
    %
    T04D2.8
    .
    .
    .
    .
    .
    %
    也许下面还有相同的格式,文件名会自动生成.
    杲大胜 ...........勤!能!补!拙!........ 勤!勤!勤!.............
    2011年4月20日 8:35

答案

  • 假设你的文件名是demo01.txt

    string s = File.ReadAllText("demo01.txt");
    foreach (Match m in Regex.Matches(s, @"(?sn)T\d+(?<file_name>\S+)\s*(?<data>((?!(?m:^)T\d+).)+)"))
    {
      File.WriteAllText(m.Groups["file_name"].Value, m.Groups["data"].Value);
    }
    


    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    • 已标记为答案 杲大盛 2011年4月21日 0:23
    2011年4月20日 9:48
    版主

全部回复

  • 假设你的文件名是demo01.txt

    string s = File.ReadAllText("demo01.txt");
    foreach (Match m in Regex.Matches(s, @"(?sn)T\d+(?<file_name>\S+)\s*(?<data>((?!(?m:^)T\d+).)+)"))
    {
      File.WriteAllText(m.Groups["file_name"].Value, m.Groups["data"].Value);
    }
    


    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    • 已标记为答案 杲大盛 2011年4月21日 0:23
    2011年4月20日 9:48
    版主
  • 代码高档了一点,有的我还没有学到,看起来费劲,最好能用中文解释一下,描述它的工作过程.谢谢,


    杲大胜 ...........勤!能!补!拙!........ 勤!勤!勤!.............
    2011年4月20日 10:53
  • 你好!

    上面用到了正则表达式,其目的就是找出满足指定格式的文本。建议你看看下面的地址

     

    正则表达式介绍

    http://msdn.microsoft.com/zh-cn/library/28hw3sce(v=vs.80).aspx


    知识改变命运,奋斗成就人生!
    2011年4月20日 11:51
    版主
  •  程序试过.转换出来的文本带T的行没有了.


    杲大胜 ...........勤!能!补!拙!........ 勤!勤!勤!.............
    2011年4月23日 0:29
  • 哦。那行你也要么?我以为不要呢,那这里修改一下就行了

     

    File.WriteAllText(m.Groups["file_name"].Value, m.Groups["data"].Value);

    改为

    File.WriteAllText(m.Groups["file_name"].Value, m.Value);


    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年4月23日 1:34
    版主
  • 好用! 再次感谢.

    请教:如何使转换出来的文件名和T开头行的字符串一样呢?

     
    杲大胜 ...........勤!能!补!拙!........ 勤!勤!勤!.............







    2011年4月23日 2:13
  • foreach (Match m in Regex.Matches(s, @"(?sn)T\d+(?<file_name>\S+)\s*(?<data>((?!(?m:^)T\d+).)+)"))
    改为
    foreach (Match m in Regex.Matches(s, @"(?sn)(?<file_name>T\d+\S+)\s*(?<data>((?!(?m:^)T\d+).)+)"))

    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年4月25日 3:06
    版主