加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – var [] []数组删除特定的单词

发布时间:2020-12-15 23:38:53 所属栏目:百科 来源:网络整理
导读:我有点问题.我有一个带有“NaN”值和双打的.csv(例如0.6034),我试图将CSV的双打读入数组[y] [x]. 目前,我读了整个.csv,但我无法在之后删除所有“NaN”值. (它应解析CSV并将数字添加到数组[y] [x]并保留所有“NaN”) 我目前的代码: var rows = File.ReadAllL
我有点问题.我有一个带有“NaN”值和双打的.csv(例如0.6034),我试图将CSV的双打读入数组[y] [x].

目前,我读了整个.csv,但我无法在之后删除所有“NaN”值. (它应解析CSV并将数字添加到数组[y] [x]并保留所有“NaN”)

我目前的代码:

var rows = File.ReadAllLines(filepath).Select(l => l.Split(';').ToArray()).ToArray(); //reads WHOLE .CSV to array[][]


        int max_Rows = 0,j,rank;
        int max_Col = 0;
        foreach (Array anArray in rows)
        {
            rank = anArray.Rank;
            if (rank > 1)
            {
                 // show the lengths of each dimension
                for (j = 0; j < rank; j++)
                {

                }
            }
            else
            {

            }
            // show the total length of the entire array or all dimensions

            max_Col = anArray.Length; //displays columns
            max_Rows++;  //displays rows
        }

我尝试过搜索但是找不到任何有帮助我的东西.
我知道这可能很容易,但我是C#的新手.

.CSV和期望的结果:

NaN;NaN;NaN;NaN
NaN;1;5;NaN
NaN;2;6;NaN
NaN;3;7;NaN
NaN;4;8;NaN
NaN;NaN;NaN;NaN

这是我的样本.csv.我应该更清楚,对不起!每一行都有一个NaN.我希望它显示如下:

1;5
2;6
3;7
4;8

这只是.csv的一个样本真正的csv有arround 60.000值…我需要用[y] [x]得到输入,例如[0] [0]应该显示“1”和[2] [ 1]应显示“7”等.

再次感谢你的帮助!

解决方法

如果要删除包含NAN的所有行(CSV的典型任务 – 清除所有不完整的行),例如

123.0; 456; 789
    2.1; NAN;  35     <- this line should be removed (has NaN value)
     -5;   3;  18

你可以像这样实现它

double[][] data = File
    .ReadLines(filepath)
    .Select(line => line.Split(new char[] {';','t'},StringSplitOptions.RemoveEmptyEntries))
    .Where(items => items  // Filter first...
       .All(item => !string.Equals("NAN",item,StringComparison.OrdinalIgnoreCase)))
    .Select(items => items
       .Select(item => double.Parse(item,CultureInfo.InvariantCulture))
       .ToArray()) // ... materialize at the very end
    .ToArray();

使用string.Join显示行:

string report = string.Join(Environment.NewLine,data
   .Select(line => string.Join(";",line)));

 Console.Write(report);

编辑:实际问题是仅从CSV中获取第2和第3个完整列:

NaN;NaN;NaN;NaN
NaN;1;5;NaN
NaN;2;6;NaN
NaN;3;7;NaN
NaN;4;8;NaN
NaN;NaN;NaN;NaN

期望的结果是

[[1,5],[2,6],[3,7],[4,8]]

implmentation:

double[][] data = File
  .ReadLines(filepath)
  .Select(line => line
     .Split(new char[] {';'},StringSplitOptions.RemoveEmptyEntries)
     .Skip(1) 
     .Take(2)
     .Where(item => !string.Equals("NAN",StringComparison.OrdinalIgnoreCase))
     .ToArray())
  .Where(items => items.Length == 2)
  .Select(items => items
    .Select(item => double.Parse(item,CultureInfo.InvariantCulture))
    .ToArray())
  .ToArray();

测试

// 1
Console.Write(data[0][0]);
// 5
Console.Write(data[0][1]);
// 2
Console.Write(data[1][0]);

所有价值观一气呵成:

string report = string.Join(Environment.NewLine,line)));

Console.Write(report);

结果:

1;5
2;6
3;7
4;8

编辑2:如果您只想提取非NaN值(请注意,初始CSV结构将被破坏):

1;2;3              1;2;3
NAN;4;5            4;5   <- please,notice that the structure is lost
6;NAN;7        ->  6;7
8;9;NAN;           8;9
NAN;10;NAN         10
NAN;NAN;11         11

然后

double[][] data = File
  .ReadLines(filepath)
  .Select(line => line
     .Split(new char[] {';'},StringSplitOptions.RemoveEmptyEntries)
     .Where(item => !string.Equals("NAN",StringComparison.OrdinalIgnoreCase)))
  .Where(items => items.Any()) 
  .Select(items => items
    .Select(item => double.Parse(item,CultureInfo.InvariantCulture))
    .ToArray())
  .ToArray();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读