首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#怎么实现对资料按固定格式去重复

2012-09-15 
C#如何实现对资料按固定格式去重复?各位大虾,请教问题如下:1022012061513585300A219500011032012061609083

C#如何实现对资料按固定格式去重复?
各位大虾,请教问题如下:
1022012061513585300A21950001
1032012061609083100A21950001
1032012061609083800A21950001
以上是用 指纹卡钟导出的考勤记录,格式如第一条(1022012061513585300A21950001)说明:
卡钟编号三位【如102】,日期时间16位【20120615135853】,固定格式添加两个‘0’,工号六位【A21950】,固定格式【001】

但发现卡钟没有 在同一时间段防止重复验证的功能,导致一个员工可以多次按压指纹验证,导出的记录就出现在同一时间段多条重复记录,如上面第二,第三条测试记录。同一天在上午09:08 验证了两次 。这样就没办法直接导入到我们的人事系统做考勤处理。
因为考勤软件没办法改,我想做一个C#的小程序实现去重复功能,只要同一天同一个时间段验证次数>=2,删除一条记录,保留最后一次验证记录,请大虾们给点指点。

[解决办法]
先排序,后遍历.最后删除不符合的记录
[解决办法]
打开时间肯定是有序的,按时间排列的,那打卡时,你就先去里面找是否有重复时间段的,比如(103201206160908),如果有,就不在记录了,因为是有序的内容,所以对于查找方法,可以采用二分法
[解决办法]
你的逻辑不是都有了么?
将日期时间和工号单独提取出来对比,
在一个时间段,比如早上10点前如果有重复,以第1个为准,
下午4点后有重复以最后一个为准,
这样看,可以只保留同一天第1次和最后一次就行了
[解决办法]
一个示例,以分为限排重

C# code
string[] array = { "1022012061513585300A21950001", "1032012061609083100A21950001", "1032012061609083800A21950001" };SortedList<string, Tuple> slist = new SortedList<string, Tuple>();foreach (var item in array){    string key = item.Substring(19, 6) + item.Substring(3, 12);    string clock = item.Substring(0, 3);    int second = int.Parse(item.Substring(15, 2));    Tuple tuple;    if (slist.TryGetValue(key, out tuple))    {        if (tuple.second < second)        {            tuple.clock = clock;            tuple.second = second;        }    }    else    {        tuple = new Tuple { clock = clock, second = second };        slist.Add(key, tuple);    }}string[] result = new string[slist.Count];for (int i = 0; i < slist.Count; i++){    string key = slist.Keys[i];    Tuple tuple = slist.Values[i];    result[i] = string.Concat(tuple.clock, key.Substring(6), tuple.second.ToString("D2"), "00", key.Substring(0, 6), "001");} 

热点排行