我想把一个文件夹下面所有后缀名为sh的文件的所有含有configGenericVideoEnc.pl的行。例如下面所示./xcode.configGenericVideoEnc.pl -u32PID 6410 -u32EncoderType 0 -u32CodingMode 2 -u32BitRate 1850000 -instance 4 中的所有-u32PID和-u32BitRate的值2和1850000记录下来。
然后以qar geq 2*145 in 6410和qar feq 2*143 in 6140的两行记录的形式写到与sh同文件名但是后缀为qar的文件中去。但是-u32PID和-u32BitRate的值还是变化的,每一个含有configGenericVideoEnc.pl的行都不一样,每个文件不一样且每个文件有含有的行数也不一样。我没有想法。急切求帮助 c#python

解决方案 »

  1.   

    我只给你写一多半,剩下的代码请你自己动手去写吧:var path = "e:\\abc\\def\\yourpath";
    var query = from file in new DirectoryInfo(path).GetFiles("*.sh")
                from ln in File.ReadAllLines(file.FullName)
                where ln.Contains("configGenericVideoEnc.pl")
                let sp = ln.Split(new char[] { ' ' }, StringSplitOptions.None)
                let value1 = (from i in Enumerable.Range(0, sp.Length)
                                where sp[i] == "-u32PID"
                                select sp[i + 1]).First()
                let value2 = (from i in Enumerable.Range(0, sp.Length)
                                where sp[i] == "-u32CodingMode"
                                select sp[i + 1]).First()
                let value3 = (from i in Enumerable.Range(0, sp.Length)
                                where sp[i] == "-u32BitRate"
                                select sp[i + 1]).First()
                select new { fileName = file.Name, value1, value2, value3 };
    foreach (var rec in query)
    {
        int i = 0;
    }
      

  2.   

    恩,其中那一行你也可以改为 ln.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)我想说的是:c#、Linq等等,都是非常优雅的。其它很多时髦的所谓编程语言,我看着闹心。
      

  3.   

    嗯,Linq是“延迟加载的”。我发现还是把 GetFiles("*.sh") 改为 EnumerateFiles("*.sh") 更合理,这样可以避免操作中内存不足。
      

  4.   


    python也有类似的库,linq只能算C#的补课吧,追上了优雅的其他语言。
    C#也有它不优雅的一面,作为静态语言,它的语法几乎是不能改造的。在大多数解释语言中,API即语法。解释器本身也可以视作API,而你编写代码,也可以视作语言的扩展——所以那些优雅的东西一出现,动态语言马上就能追上,而C#只能等微软在后续版本中更新喽。
      

  5.   

    放到vs里执行,可以看到在foreach循环中 rec.fileName、rec.value1、rec.value2 已经得到了要分析的内容。剩下就是调用 File.AppendAllLines 或者 File.WriteAllLines 写相应的数据行就行了。现在很多人都命苦。应聘的、招人的,都有难度,都没钱。
      

  6.   

    ReadAllLines  没有这个方法呀
      

  7.   

    恩  有这个方法  那个能问个很菜很菜的问题吗?为什么用select  为什么你的写法我在平时书里和控制台程序中还有Windows的简单程序中都没有见过呢
      

  8.   

    query中除了存我要用的value1和value3  当然value2我不需要,我就把这部分去掉了为什么还存了filename