excel或c#或SQL解决scheme来获取期数

我有一个看起来像这样的数据集

id, value1,value2,value3,value4,value5...value200 (i am showing only 5 but solution needs to accomodate 200 values) a, 10,4,2,0,0 b, 23,0,0,2,0 c, 0,2,4,0,0 d, 0,0,0,1,0 

我想返回每行有多less个值的COUNT,在尾部只有零。

对于上述数据,将是:

 3 4 2 1 

该解决scheme可以是C#或Excel(公式,而不是VBA)

非常感谢你的帮助。如果我不清楚,请告诉我

如果您以CSV数据的forms读取文件并手动parsing,则可以执行类似的操作来查找开头和结尾处的第一个非零条目:

 // prepare sample data (as CSV) var csv = @"id, value1,value2,value3,value4,value5 a, 10,4,2,0,0 b, 23,0,0,2,0 c, 0,2,4,0,0 d, 0,0,0,1,0"; // get column data var lines = csv.Split('\n'); var rows = lines.Skip(1).Select ( line => line.Split(',').Skip(1).Select (l => Convert.ToInt32(l))); var result = new List<int>(); foreach (var row in rows) { // for each row, remove 0's at beginning and end var data = row.SkipWhile (r => r == 0).Reverse() .SkipWhile (r => r == 0).Reverse(); // and retrieve the count result.Add(data.Count()); } // result = [3, 4, 2, 1] 

这里是我想到的解决scheme:

  1. concatonate行的价值观
  2. 转换为一个数字(这将摆脱开始零)
  3. 取中间()的单元格,结束于第一个0的起始位置(这将摆脱尾随0)
  4. 获得最终string的长度(这将产生完全所需的结果)

Excel数组公式。 按Ctrl + Shift + Enter确认公式input:

 =MAX((B2:F2>0)*COLUMN(B2:F2))-MATCH(1,--(B2:F2>0),0)-0 

注意,假定感兴趣的数据从B列开始。如果数据从不同的列开始,则最后的-0需要改变。