代码之家  ›  专栏  ›  技术社区  ›  Mukil Deepthi

将长度不等的列写入CSV

  •  2
  • Mukil Deepthi  · 技术社区  · 6 年前

    我已经反序列化了一个JSON文件,其数据结构如下#

    [DataContract]
    public class SentimentData
    {
        [DataMember(Name ="Column1")]
        public IEnumerable<string> Column1 { get; set; }
    
        [DataMember(Name ="Column-2")]
        public IEnumerable<string> Column2 { get; set; }
    }
    

    列1的计数不等于列2的计数。我只想基本上转储第一列中第1列中的所有数据和第二列中第2列的数据。我试过以下方法,但没有效果。

    using (var writer = new StreamWriter(@"C:\test.csv"))
    {
        var nr = column1data.Select(y => new { Column1= y }).ToList();
        //var nnr = column2data.Select(y => new { Column2 = y }).ToList();
    
        var csv = new CsvWriter(writer);
        csv.WriteRecords(nr);
        //csv.WriteRecords(nnr);
        writer.Flush();
    }
    

    谁能知道怎么做吗?

    {
      "Negative": [
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt"
      ],
      "Non-Negative": [
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt",
        "a.txt",
        "b.txt"
      ]
    }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Nkosi    6 年前

    Enumerable.Zip

    下面的扩展是为了允许压缩长度不等的集合而派生的

    public static class MyEnumerablExtensions {
    
        public static IEnumerable<TResult> ZipOrDefault<TFirst, TSecond, TResult>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector) {
            if (first == null) throw Error.ArgumentNull("first");
            if (second == null) throw Error.ArgumentNull("second");
            if (resultSelector == null) throw Error.ArgumentNull("resultSelector");
            using (IEnumerator<TFirst> e1 = first.GetEnumerator()) {
                using (IEnumerator<TSecond> e2 = second.GetEnumerator()) {
                    while (e1.MoveNext()) {
                        if (e2.MoveNext()) {
                            yield return resultSelector(e1.Current, e2.Current);
                        } else {
                            yield return resultSelector(e1.Current, default(TSecond));
                        }
                    }
                    while (e2.MoveNext()) {
                        yield return resultSelector(default(TFirst), e2.Current);
                    }
                }
            }
        }
        class Error {
            public static Exception ArgumentNull(string parameter) {
                return new ArgumentNullException(parameter);
            }
        }
    }
    

    using (var writer = new StreamWriter(@"C:\test.csv")) {
        var records = column1data.ZipOrDefault(column2data, 
            (Column1, Column2) => new { Column1, Column2 });
    
        var csv = new CsvWriter(writer);
        csv.WriteRecords(records);
        writer.Flush();
    }
    
        2
  •  -1
  •   Nkosi    6 年前

    试试newtonsoft json.net

    像这样安装

    install-package newtonsoft.json
    

    static class Program
    {
       static void Main()
       {
                var json = "{ \"Negative\": [ \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\" ], \"Non-Negative\": [ \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\" ] }";
                var classObject = JsonConvert.DeserializeObject<RootObject>(json);
        }
    }
    
    public class RootObject
    {
       public List<string> Negative { get; set; }
    
       [JsonProperty("Non-Negative")]
       public List<string> NonNegative { get; set; }
    }}