0

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

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

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

对于上述数据,它将是:

3
4
2
1

解决方案可以是 c# 或 excel(公式,而不是 vba)

非常感谢您的帮助。/指导,如果我不清楚,请告诉我

4

3 回答 3

2

如果您将文件作为 CSV 数据读取并手动解析,您可以执行以下操作来查找开头和结尾的第一个非零条目:

// 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]
于 2012-04-26T22:32:08.917 回答
1

这是我想到的解决方案:

  1. 连接值行
  2. 转换为数字(这将摆脱开头的零)
  3. 取单元格的 mid(),在第一个 0 的起始位置结束(这将摆脱尾随的 0)
  4. 获取最终字符串的长度(这将产生所需的结果)
于 2012-05-01T20:39:50.080 回答
-1

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

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

请注意,这假设感兴趣的数据从 B 列开始。-0如果数据从不同的列开始,则需要更改最终数据。

于 2012-04-27T01:34:49.900 回答