萌战吧 关注:989,576贴子:32,512,852
  • 12回复贴,共1

求config.txt语法

只看楼主收藏回复

刚刚用一点时间拿Python搞了个小计票器,数据处理模块是可任意扩展的。。。这个先不说,现在距离无人工干预计票就差config.txt解析一块了。因为明天手上有个系统要上线,所以现在不想去2ch找资料了。求处理方案,简要描述下就好
@灵剑2006 


1楼2012-08-19 13:28回复
    private void ReadConfig(string html)
    {
    using (var sr = new System.IO.StringReader(html))
    {
    sr.ReadLine();
    sr.ReadLine();
    int[] r = sr.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
    if (r.Length != 3)
    return;
    var vgs = VoteGroups;
    var cc = vgs.SelectMany(x => x.VoteOptions).ToLookup(x => x.OriginalName, x => x.CommentCount);
    if (VoteGroups == null || VoteGroups.Length != r[0])
    {
    //Re-parsing
    List<VoteGroup> temp = new List<VoteGroup>();
    for (int i = 0; i < r[0]; i++)
    {
    temp.Add(new VoteGroup(this)
    {
    Name = "第" + (i+1).ToString() + "组",
    VoteOptions = new VoteOption[0],
    Index = i
    });
    }
    vgs = temp.ToArray();
    }
    var opts = AllOptions.ToArray();
    for (int i = 0; i < r[0]; i++)
    {
    List<VoteOption> vo = new List<VoteOption>();
    for (int j = 0; j < r[1]; j++)
    {
    string[] names = sr.ReadLine().Split(',');
    if (names.Length == 0 || string.IsNullOrWhiteSpace(names[0]))
    continue;
    var cs = cc[names[0]];
    var opt = opts.FirstOrDefault(x=>x.OriginalName == names[0]);
    if (opt != null)
    {
    opt.Index = j;
    opt.Aliases = names.Select(x => JISNormalizer.Normalize(x)).Where(x=>!string.IsNullOrEmpty(x)).ToList();
    vo.Add(opt);
    }
    else
    {
    vo.Add(new VoteOption()
    {
    Name = names[0],
    OriginalName = names[0],
    Aliases = names.Select(x => JISNormalizer.Normalize(x)).Where(x=>!string.IsNullOrEmpty(x)).ToList(),
    Index = j,
    CommentCount = cs.Any() ? cs.Max() : 0
    });
    }
    }
    vgs[i].VoteOptions = vo.ToArray();
    }
    RecommendedValidCount = r[2];
    SetVoteGroups(vgs);
    ConfigLoaded = true;
    }
    }
    


    IP属地:北京2楼2012-08-19 14:41
    收起回复
      12/08/19
      3 3 1
      永水女子の黒髪を首元で2つに括った选手(神代小莳)@咲-Saki- 阿知贺编 episode of side-A,永水女子の黒髪を首元で2つに括った选手(神代小莳),永水女子の黒髪を首元で2つに括った选手,神代小莳,神代,小莳
      水瀬伊织@THE IDOLM@STER,水瀬伊织,水瀬,伊织,いおりん
      长野原みお@日常,长野原みお,长野原,みお,ちゃんみお
      园城寺怜@咲-Saki- 阿知贺编 episode of side-A,园城寺怜,园城寺,怜,とき,トキ,ダブル,トリプル,一巡先を见る者
      御庭つみき@あっちこっち,御庭つみき,御庭,つみき,ツンネコ
      瀬名爱理@ましろ色シンフォニー -The color of lovers-,瀬名爱理,瀬名,爱理
      见崎鸣@Another,见崎鸣,见崎,鸣,みさき,めい
      リアス・グレモリー@ハイスクールD×D,リアス・グレモリー,リアス,グレモリー,红髪の灭杀姫,红髪のルイン・プリンセス
      杉浦绫乃@ゆるゆり,杉浦绫乃,杉浦,绫乃,罚金バッキンガム,ノンノンノートルダム,安心アンコールワット
      NGkey
      NGres
      OKres
      NGID
      NGword
      NGcode
      end
      计票时候的config如上图所示,第一行是日期,第二行在正式结束之后会变成串序号之类的东西不用管,第三行是组数、每组人数、限投数,然后每行第一个名称是正式名称,后面跟着的是别名(用这些名字或者包含这些名字投票也计这个人)
      再后面的正式计票的时候才会用也不用管


      IP属地:北京3楼2012-08-19 14:44
      收起回复
        注意有时候每组人数不一样,所以中间可能会有空行


        IP属地:北京4楼2012-08-19 14:45
        收起回复
          那些年我们挂过的语言


          IP属地:浙江5楼2012-08-19 16:06
          收起回复