将一行从CSV拆分到List< Key,Value> [英] Split a line from a CSV to a List<Key, Value>

查看:79
本文介绍了将一行从CSV拆分到List< Key,Value>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文本文件,表示带有CSV的';'成为分隔符.这是一个虚拟转储供参考:

I have a text file representing a CSV with a ';' being a separator. Here is a dummy dump for reference:

USER_EMPLOYEE_ID;SYSTEM1;USERNAME1;SYSTEM2;USERNAME2;SYSTEM3;USERNAME3;SYSTEM4;USERNAME4;SYSTEM5;USERNAME5;SYSTEM6;USERNAME6;SYSTEM7;USERNAME7;SYSTEM8;USERNAME8;SYSTEM9;USERNAME9;SYSTEM10;USERNAME10;SYSTEM11;USERNAME11;SYSTEM12;USERNAME12;SYSTEM13;USERNAME13;SYSTEM14;USERNAME14;SYSTEM15;USERNAME15;SYSTEM16;USERNAME16;SYSTEM17;USERNAME17;SYSTEM18;USERNAME18;SYSTEM19;USERNAME19;SYSTEM20;USERNAME20;SYSTEM21;USERNAME21;SYSTEM22;USERNAME22;SYSTEM23;USERNAME23;SYSTEM24;USERNAME24;SYSTEM25;USERNAME25;SYSTEM26;USERNAME26;SYSTEM27;USERNAME27;SYSTEM28;USERNAME28;SYSTEM29;USERNAME29;SYSTEM30;USERNAME30;SYSTEM31;USERNAME31;SYSTEM32;USERNAME32;SYSTEM33;USERNAME33;SYSTEM34;USERNAME34;SYSTEM35;USERNAME35;SYSTEM36;USERNAME36;SYSTEM37;USERNAME37;SYSTEM38;USERNAME38;SYSTEM39;USERNAME39;SYSTEM40;USERNAME40;SYSTEM41;USERNAME41;SYSTEM42;USERNAME42;SYSTEM43;USERNAME43;SYSTEM44;USERNAME44;SYSTEM45;USERNAME45;SYSTEM46;USERNAME46;SYSTEM47;USERNAME47;SYSTEM48;USERNAME48;SYSTEM49;USERNAME49;SYSTEM50;USERNAME50;SYSTEM51;USERNAME51;SYSTEM52;USERNAME52;SYSTEM53;USERNAME53;SYSTEM54;USERNAME54;SYSTEM55;USERNAME55;SYSTEM56;USERNAME56;SYSTEM57;USERNAME57;SYSTEM58;USERNAME58;SYSTEM59;USERNAME59;SYSTEM60;USERNAME60;SYSTEM61;USERNAME61;SYSTEM62;USERNAME62;SYSTEM63;USERNAME63;SYSTEM64;USERNAME64;SYSTEM65;USERNAME65;SYSTEM66;USERNAME66;SYSTEM67;USERNAME67;SYSTEM68;USERNAME68;SYSTEM69;USERNAME69;SYSTEM70;USERNAME70;SYSTEM71;USERNAME71;SYSTEM72;USERNAME72;SYSTEM73;USERNAME73;SYSTEM74;USERNAME74;SYSTEM75;USERNAME75;SYSTEM76;USERNAME76;SYSTEM77;USERNAME77;SYSTEM78;USERNAME78;SYSTEM79;USERNAME79;SYSTEM80;USERNAME80;SYSTEM81;USERNAME81;SYSTEM82;USERNAME82;SYSTEM83;USERNAME83;SYSTEM84;USERNAME84;SYSTEM85;USERNAME85;SYSTEM86;USERNAME86;SYSTEM87;USERNAME87;SYSTEM88;USERNAME88;SYSTEM89;USERNAME89;SYSTEM90;USERNAME90;SYSTEM91;USERNAME91;SYSTEM92;USERNAME92;SYSTEM93;USERNAME93;SYSTEM94;USERNAME94;SYSTEM95;USERNAME95;SYSTEM96;USERNAME96;SYSTEM97;USERNAME97;SYSTEM98;USERNAME98;SYSTEM99;USERNAME99;SYSTEM100;USERNAME100;SYSTEM101;USERNAME101;SYSTEM102;USERNAME102;SYSTEM103;USERNAME103;SYSTEM104;USERNAME104;SYSTEM105;USERNAME105;SYSTEM106;USERNAME106;SYSTEM107;USERNAME107;SYSTEM108;USERNAME108;SYSTEM109;USERNAME109;SYSTEM110;USERNAME110;SYSTEM111;USERNAME111;SYSTEM112;USERNAME112;SYSTEM113;USERNAME113;SYSTEM114;USERNAME114;SYSTEM115;USERNAME115;SYSTEM116;USERNAME116;SYSTEM117;USERNAME117;SYSTEM118;USERNAME118;SYSTEM119;USERNAME119;SYSTEM120;USERNAME120;SYSTEM121;USERNAME121;SYSTEM122;USERNAME122;SYSTEM123;USERNAME123;SYSTEM124;USERNAME124;SYSTEM125;USERNAME125;SYSTEM126;USERNAME126;SYSTEM127;USERNAME127
DGE3BLU;FS01;DGE3BLU;XHK218;DGE3BLU;XHP218;DGE3BLU;F3T103;DGE3BLU;FBP112;DGE3BLU;FBP112-1;DGE3BLU;F3D103;DGE3BLU;FSP100;DGE3BLU;FSP100-1;DGE3BLU;F3W103;DGE3BLU;FAT111;DGE3BLU;F3I103;DGE3BLU;FAK111;DGE3BLU;FAK111-1;DGE3BLU;FAK111-2;DGE3BLU;F3P103;DGE3BLU;F3P103-1;DGE3BLU;XHE218;DGE3BLU;FAW111;DGE3BLU;FAP111;DGE3BLU;FAP111-1;DGE3BLU;FAP111-2;DGE3BLU;F3K103;DGE3BLU;FKP111;DGE3BLU;FTP021;DGE3BLU;FAT113;DGE3BLU;F1P101;DGE3BLU;F1P101-1;DGE3BLU;FAT121;DGE3BLU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DGE3BMR;FS01;DGE3BMR;F3P103;DGE3BMR;F3P103-1;DGE3BMR;F1P101;DGE3BMR;F1P101-1;DGE3BMR;FSP100;DGE3BMR;FSP100-1;DGE3BMR;FBK112;DGE3BMR;FBK112-1;DGE3BMR;FAP111;DGE3BMR;FAP111-1;DGE3BMR;FAP111-2;DGE3BMR;FBT112;DGE3BMR;FBP112;DGE3BMR;FBP112-1;DGE3BMR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DGE3BOL;FS01;DGE3BOL;FAT111;DGE3BOL;FSQ100;DGE3BOL;FHI400;DGE3BOL;FSE100;DGE3BOL;F3K103;DGE3BOL;F1P101;DGE3BOL;F1P101-1;DGE3BOL;FHK222;DGE3BOL;FJI120;DGE3BOL;XHP218;DGE3BOL;F6P106;DGE3BOL;F3P103;DGE3BOL;F3P103-1;DGE3BOL;F1Q101;DGE3BOL;FTP021;DGE3BOL;F1K101;DGE3BOL;F1K101-1;DGE3BOL;FHE400;DGE3BOL;FAK111;DGE3BOL;FAK111-1;DGE3BOL;FAK111-2;DGE3BOL;FHP400;DGE3BOL;FSI100;DGE3BOL;FHE222;DGE3BOL;FSK100;DGE3BOL;FSK100-1;DGE3BOL;FAP111;DGE3BOL;FAP111-1;DGE3BOL;FAP111-2;DGE3BOL;FHI222;DGE3BOL;FSP100;DGE3BOL;FSP100-1;DGE3BOL;FHK400;DGE3BOL;FSD100;DGE3BOL;F6K106;DGE3BOL;FBP112;DGE3BOL;FBP112-1;DGE3BOL;FJK120;DGE3BOL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DGE3BOR;FS01;DGE3BOR;FSP100;DGE3BOR;FSP100-1;DGE3BOR;F6K106;DGE3BOR;FHP222;DGE3BOR;F3P103;DGE3BOR;F3P103-1;DGE3BOR;F4P104;DGE3BOR;F3T103;DGE3BOR;F4D604;DGE3BOR;FAP111;DGE3BOR;FAP111-1;DGE3BOR;FAP111-2;DGE3BOR;F6P106;DGE3BOR;FNK112;DGE3BOR;F3I103;DGE3BOR;FBK112;DGE3BOR;FBK112-1;DGE3BOR;F3D103;DGE3BOR;F3W103;DGE3BOR;FAE111;DGE3BOR;FAE111-1;DGE3BOR;FAE111-2;DGE3BOR;FPP126;DGE3BOR;F1K101;DGE3BOR;F1K101-1;DGE3BOR;FSI100;DGE3BOR;F7E107;DGE3BOR;F1Q101;DGE3BOR;F1P101;DGE3BOR;F1P101-1;DGE3BOR;FBE112;DGE3BOR;FBE112-1;DGE3BOR;F1F101;DGE3BOR;FSQ100;DGE3BOR;F5P105;DGE3BOR;FBP112;DGE3BOR;FBP112-1;DGE3BOR;F6E106;DGE3BOR;FJP120;DGE3BOR;F4K104;DGE3BOR;FBT112;DGE3BOR;F1F201;DGE3BOR;FHK222;DGE3BOR;FSK100;DGE3BOR;FSK100-1;DGE3BOR;F1W201;DGE3BOR;F3K103;DGE3BOR;F7T107;DGE3BOR;F6D106;DGE3BOR;FPK126;DGE3BOR;F7K107;DGE3BOR;F1W101;DGE3BOR;F4D104;DGE3BOR;FSD100;DGE3BOR;FHI222;DGE3BOR;FNP112;DGE3BOR;FSE100;DGE3BOR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

现在,第一列是用户标识符.对于此处的每个用户ID,我要生成一个随后所有SYSTEMn和USERNAMEn的KeyValue对的列表.

Now, the first column is a user identifier. For each user id here, I want generate a List of KeyValue pairs of all SYSTEMn and USERNAMEn that follow.

我已经阅读了以下文件:

I have read the file as follows:

  using (var fs = File.Open(importFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
  {
    using (var bs = new BufferedStream(fs))
    {
      using (var sr = new StreamReader(bs))
      {
        String readLine;
        while ((readLine = sr.ReadLine()) != null)
        {
          if (String.IsNullOrEmpty(readLine) || readLine == "---EOF---")
          {
            break;
          }

          // Data line
          var dataRow = readLine.Split(new[] { ";" }, StringSplitOptions.None);

          // Skip the first element as it the identifier.
          var rights = dataRow.Skip(1).Select(new {Key=?, Value=?}).ToList();

        }
      }
    }
  }

这不是那种方式.有人可以提出解决方案吗?

Which doesn't work that way. Can anyone suggest a solution?

谢谢.

推荐答案

如何解决

var lookup = dataRow.Skip(1)
    .Select((data, index) => new { lookup = index % 2, index = index, data = data})
    .ToLookup(d => d.lookup);

var rights = lookup[0].Join(lookup[1],
        system => system.index + 1,
        username => username.index,
        (system, username) => new
        {
            system = system.data,
            useraname = username.data
        })
        .Where(d => !string.IsNullOrEmpty(d.system))
        .ToDictionary(d => d.system, d => d.useraname);

这篇关于将一行从CSV拆分到List< Key,Value>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆