示例#1
0
        // 合并时间范围内的多个XML文件
        public int MergeXmlFiles(
            string strLibraryCodeList,
            ref int nStop,
            string strDateRangeString,
            string strStyle,
            string strOutputFilename,
            out RangeStatisInfo info,
            out string strError)
        {
            strError = "";
            int nRet = 0;

            File.Delete(strOutputFilename);

            info = new RangeStatisInfo();

            string strStartDate = "";
            string strEndDate = "";

            try
            {
                // 将日期字符串解析为起止范围日期
                // throw:
                //      Exception
                ParseDateRange(strDateRangeString,
                    out strStartDate,
                    out strEndDate);
            }
            catch (Exception ex)
            {
                strError = ex.Message;
                return -1;
            }

            info.StartDate = strStartDate;
            info.EndDate = strEndDate;

            DateTime start;
            DateTime end;

            start = DateTimeUtil.Long8ToDateTime(strStartDate);

            if (strEndDate == "")
            {
                end = start;
                info.EndDate = strStartDate;
            }
            else
            {
                end = DateTimeUtil.Long8ToDateTime(strEndDate);

                TimeSpan delta = end - start;
                if (delta.Days < 0)
                {
                    // 交换两个时间
                    DateTime temp = end;
                    end = start;
                    start = temp;
                }
            }

            int nCount = 0; // 实际存在多少天
            DateTime current = start;
            for (; ; )
            {
                if (nStop != 0)
                {
                    strError = "用户中断";
                    return -1;
                }

                string strDate = DateTimeUtil.DateTimeToString8(current);

                string strFilename = this.StatisDir + "\\" + strDate + ".xml";

                info.Days++;

                if (File.Exists(strFilename) == true)
                {
                    // 首个文件
                    if (nCount == 0)
                    {
                        if (SessionInfo.IsGlobalUser(strLibraryCodeList) == true)
                        {
                            // 如果是全局用户,直接复制第一个文件
                            try
                            {
                                File.Copy(strFilename, strOutputFilename, true);
                            }
                            catch (Exception ex)
                            {
                                // text-level: 内部错误
                                strError = "复制首个文件 " + strFilename + "到目标文件 " + strOutputFilename + "时发生错误: " + ex.Message;
                                return -1;
                            }
                        }
                        else
                        {
                            // 如果是分馆用户,则要对第一个文件进行过滤处理,去掉不相干的那些<library>元素
                            XmlDocument dom = new XmlDocument();
                            try
                            {
                                dom.Load(strFilename);
                            }
                            catch (Exception ex)
                            {
                                strError = "装载首个文件 '" + strFilename + "' 到XMLDOM时出错: " + ex.Message;
                                return -1;
                            }

                            XmlNodeList nodes = dom.DocumentElement.SelectNodes("library");
                            foreach (XmlNode node in nodes)
                            {
                                string strCode = DomUtil.GetAttr(node, "code");
                                if (StringUtil.IsInList(strCode, strLibraryCodeList) == false)
                                    node.ParentNode.RemoveChild(node);
                            }

                            try
                            {
                                dom.Save(strOutputFilename);
                            }
                            catch (Exception ex)
                            {
                                strError = "保存XMLDOM到文件 '" + strOutputFilename + "' 时出错: " + ex.Message;
                                return -1;
                            }
                        }

                        info.RealStartDate = DateTimeUtil.DateTimeToString8(current);
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }
                    else
                    {
                        // 合并两个XML文件到目标文件
                        nRet = MergeTwoXmlFiles(
                            strLibraryCodeList,
                            strFilename,
                            strOutputFilename,
                            strOutputFilename,
                            out strError);
                        if (nRet == -1)
                            return -1;
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }

                    nCount++;

                    info.RealDays++;
                }

                if (current >= end)
                    break;

                current = current.AddDays(1);
            }

            return 0;
        }
示例#2
0
文件: AppStatis.cs 项目: pxmarc/dp2
        // 合并时间范围内的多个XML文件
        public int MergeXmlFiles(
            string strLibraryCodeList,
            ref int nStop,
            string strDateRangeString,
            string strStyle,
            string strOutputFilename,
            out RangeStatisInfo info,
            out string strError)
        {
            strError = "";
            int nRet = 0;

            File.Delete(strOutputFilename);

            info = new RangeStatisInfo();

            string strStartDate = "";
            string strEndDate   = "";

            try
            {
                // 将日期字符串解析为起止范围日期
                // throw:
                //      Exception
                ParseDateRange(strDateRangeString,
                               out strStartDate,
                               out strEndDate);
            }
            catch (Exception ex)
            {
                strError = ex.Message;
                return(-1);
            }

            info.StartDate = strStartDate;
            info.EndDate   = strEndDate;

            DateTime start;
            DateTime end;

            start = DateTimeUtil.Long8ToDateTime(strStartDate);

            if (strEndDate == "")
            {
                end          = start;
                info.EndDate = strStartDate;
            }
            else
            {
                end = DateTimeUtil.Long8ToDateTime(strEndDate);

                TimeSpan delta = end - start;
                if (delta.Days < 0)
                {
                    // 交换两个时间
                    DateTime temp = end;
                    end   = start;
                    start = temp;
                }
            }

            int      nCount  = 0; // 实际存在多少天
            DateTime current = start;

            for (; ;)
            {
                if (nStop != 0)
                {
                    strError = "用户中断";
                    return(-1);
                }

                string strDate = DateTimeUtil.DateTimeToString8(current);

                string strFilename = this.StatisDir + "\\" + strDate + ".xml";

                info.Days++;

                if (File.Exists(strFilename) == true)
                {
                    // 首个文件
                    if (nCount == 0)
                    {
                        if (SessionInfo.IsGlobalUser(strLibraryCodeList) == true)
                        {
                            // 如果是全局用户,直接复制第一个文件
                            try
                            {
                                File.Copy(strFilename, strOutputFilename, true);
                            }
                            catch (Exception ex)
                            {
                                // text-level: 内部错误
                                strError = "复制首个文件 " + strFilename + "到目标文件 " + strOutputFilename + "时发生错误: " + ex.Message;
                                return(-1);
                            }
                        }
                        else
                        {
                            // 如果是分馆用户,则要对第一个文件进行过滤处理,去掉不相干的那些<library>元素
                            XmlDocument dom = new XmlDocument();
                            try
                            {
                                dom.Load(strFilename);
                            }
                            catch (Exception ex)
                            {
                                strError = "装载首个文件 '" + strFilename + "' 到XMLDOM时出错: " + ex.Message;
                                return(-1);
                            }

                            XmlNodeList nodes = dom.DocumentElement.SelectNodes("library");
                            foreach (XmlNode node in nodes)
                            {
                                string strCode = DomUtil.GetAttr(node, "code");
                                if (StringUtil.IsInList(strCode, strLibraryCodeList) == false)
                                {
                                    node.ParentNode.RemoveChild(node);
                                }
                            }

                            try
                            {
                                dom.Save(strOutputFilename);
                            }
                            catch (Exception ex)
                            {
                                strError = "保存XMLDOM到文件 '" + strOutputFilename + "' 时出错: " + ex.Message;
                                return(-1);
                            }
                        }

                        info.RealStartDate = DateTimeUtil.DateTimeToString8(current);
                        info.RealEndDate   = DateTimeUtil.DateTimeToString8(current);
                    }
                    else
                    {
                        // 合并两个XML文件到目标文件
                        nRet = MergeTwoXmlFiles(
                            strLibraryCodeList,
                            strFilename,
                            strOutputFilename,
                            strOutputFilename,
                            out strError);
                        if (nRet == -1)
                        {
                            return(-1);
                        }
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }

                    nCount++;

                    info.RealDays++;
                }

                if (current >= end)
                {
                    break;
                }

                current = current.AddDays(1);
            }

            return(0);
        }
示例#3
0
        // 合并时间范围内的多个XML文件
        // parameters:
        //      strLibraryCodeList  馆代码列表。用来筛选 XML 文件中的分馆节点。如果想获得所有分馆的统计信息,那就需要用 "" 作为参数值
        public int MergeXmlFiles(
            string strLibraryCodeList,
            ref int nStop,
            string strDateRangeString,
            string strStyle,
            string strOutputFilename,
            out RangeStatisInfo info,
            out string strError)
        {
            strError = "";
            int nRet = 0;

            File.Delete(strOutputFilename);

            ValueStyle valuestyle = ValueStyle.None;
            if (StringUtil.IsInList("list", strStyle) == true)
                valuestyle = ValueStyle.Total | ValueStyle.List;
            else
                valuestyle = ValueStyle.Total;

            info = new RangeStatisInfo();

            string strStartDate = "";
            string strEndDate = "";

            try
            {
                // 将日期字符串解析为起止范围日期
                // throw:
                //      Exception
                ParseDateRange(strDateRangeString,
                    out strStartDate,
                    out strEndDate);
            }
            catch (Exception ex)
            {
                strError = ExceptionUtil.GetAutoText(ex);
                return -1;
            }

            info.StartDate = strStartDate;
            info.EndDate = strEndDate;

            DateTime start;
            DateTime end;

            try
            {
                start = DateTimeUtil.Long8ToDateTime(strStartDate);
            }
            catch (Exception ex)
            {
                strError = "日期字符串 '" + strDateRangeString + "' 格式错误: " + ex.Message;
                return -1;
            }

            if (strEndDate == "")
            {
                end = start;
                info.EndDate = strStartDate;
            }
            else
            {
                try
                {
                    end = DateTimeUtil.Long8ToDateTime(strEndDate);
                }
                catch (Exception ex)
                {
                    strError = "日期字符串 '" + strDateRangeString + "' 格式错误: " + ex.Message;
                    return -1;
                }

                TimeSpan delta = end - start;
                if (delta.Days < 0)
                {
                    // 交换两个时间
                    DateTime temp = end;
                    end = start;
                    start = temp;
                }
            }

            Hashtable valuetable = new Hashtable();

            int nCount = 0; // 实际存在多少天
            DateTime current = start;
            for (; ; )
            {
                if (nStop != 0)
                {
                    strError = "用户中断";
                    return -1;
                }

                string strDate = DateTimeUtil.DateTimeToString8(current);

                string strFilename = this.StatisDir + "\\" + strDate + ".xml";

                info.Days++;

                if (File.Exists(strFilename) == true)
                {
                    XmlDocument dom = new XmlDocument();
                    try
                    {
                        dom.Load(strFilename);
                    }
                    catch (Exception ex)
                    {
                        strError = "装载首个文件 '" + strFilename + "' 到XMLDOM时出错: " + ex.Message;
                        return -1;
                    }

                    nRet = MergeValues(
                        strLibraryCodeList,
                        valuetable,
                        dom,
                        info.Days - 1,
                        valuestyle,
                        out strError);
                    if (nRet == -1)
                        return -1;

                    // 首个文件
                    if (nCount == 0)
                    {
                        info.RealStartDate = DateTimeUtil.DateTimeToString8(current);
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }
                    else
                    {
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }

                    nCount++;

                    info.RealDays++;
                }
                else
                {
                    // 当天文件不存在的情况
                    if ((valuestyle & ValueStyle.List) != 0)
                    {
                        nRet = MergeValues(
        strLibraryCodeList,
        valuetable,
        null,
        info.Days - 1,
        valuestyle,
        out strError);
                        if (nRet == -1)
                            return -1;
                    }
                }

                if (current >= end)
                    break;

                current = current.AddDays(1);
            }

            // 把Hashtable中的值写入XML文件中
            nRet = WriteToXmlFile(
                valuetable,
                strOutputFilename,
                valuestyle,
                out strError);
            if (nRet == -1)
                return -1;

            return 0;
        }
示例#4
0
文件: AppStatis.cs 项目: pxmarc/dp2
        // 合并时间范围内的多个XML文件
        // parameters:
        //      strLibraryCodeList  馆代码列表。用来筛选 XML 文件中的分馆节点。如果想获得所有分馆的统计信息,那就需要用 "" 作为参数值
        public int MergeXmlFiles(
            string strLibraryCodeList,
            ref int nStop,
            string strDateRangeString,
            string strStyle,
            string strOutputFilename,
            out RangeStatisInfo info,
            out string strError)
        {
            strError = "";
            int nRet = 0;

            File.Delete(strOutputFilename);

            ValueStyle valuestyle = ValueStyle.None;

            if (StringUtil.IsInList("list", strStyle) == true)
            {
                valuestyle = ValueStyle.Total | ValueStyle.List;
            }
            else
            {
                valuestyle = ValueStyle.Total;
            }

            info = new RangeStatisInfo();

            string strStartDate = "";
            string strEndDate   = "";

            try
            {
                // 将日期字符串解析为起止范围日期
                // throw:
                //      Exception
                ParseDateRange(strDateRangeString,
                               out strStartDate,
                               out strEndDate);
            }
            catch (Exception ex)
            {
                strError = ExceptionUtil.GetAutoText(ex);
                return(-1);
            }

            info.StartDate = strStartDate;
            info.EndDate   = strEndDate;

            DateTime start;
            DateTime end;

            try
            {
                start = DateTimeUtil.Long8ToDateTime(strStartDate);
            }
            catch (Exception ex)
            {
                strError = "日期字符串 '" + strDateRangeString + "' 格式错误: " + ex.Message;
                return(-1);
            }

            if (strEndDate == "")
            {
                end          = start;
                info.EndDate = strStartDate;
            }
            else
            {
                try
                {
                    end = DateTimeUtil.Long8ToDateTime(strEndDate);
                }
                catch (Exception ex)
                {
                    strError = "日期字符串 '" + strDateRangeString + "' 格式错误: " + ex.Message;
                    return(-1);
                }

                TimeSpan delta = end - start;
                if (delta.Days < 0)
                {
                    // 交换两个时间
                    DateTime temp = end;
                    end   = start;
                    start = temp;
                }
            }

            Hashtable valuetable = new Hashtable();

            int      nCount  = 0; // 实际存在多少天
            DateTime current = start;

            for (; ;)
            {
                if (nStop != 0)
                {
                    strError = "用户中断";
                    return(-1);
                }

                string strDate = DateTimeUtil.DateTimeToString8(current);

                string strFilename = this.StatisDir + "\\" + strDate + ".xml";

                info.Days++;

                if (File.Exists(strFilename) == true)
                {
                    XmlDocument dom = new XmlDocument();
                    try
                    {
                        dom.Load(strFilename);
                    }
                    catch (Exception ex)
                    {
                        strError = "装载首个文件 '" + strFilename + "' 到XMLDOM时出错: " + ex.Message;
                        return(-1);
                    }

                    nRet = MergeValues(
                        strLibraryCodeList,
                        valuetable,
                        dom,
                        info.Days - 1,
                        valuestyle,
                        out strError);
                    if (nRet == -1)
                    {
                        return(-1);
                    }

                    // 首个文件
                    if (nCount == 0)
                    {
                        info.RealStartDate = DateTimeUtil.DateTimeToString8(current);
                        info.RealEndDate   = DateTimeUtil.DateTimeToString8(current);
                    }
                    else
                    {
                        info.RealEndDate = DateTimeUtil.DateTimeToString8(current);
                    }

                    nCount++;

                    info.RealDays++;
                }
                else
                {
                    // 当天文件不存在的情况
                    if ((valuestyle & ValueStyle.List) != 0)
                    {
                        nRet = MergeValues(
                            strLibraryCodeList,
                            valuetable,
                            null,
                            info.Days - 1,
                            valuestyle,
                            out strError);
                        if (nRet == -1)
                        {
                            return(-1);
                        }
                    }
                }

                if (current >= end)
                {
                    break;
                }

                current = current.AddDays(1);
            }

            // 把Hashtable中的值写入XML文件中
            nRet = WriteToXmlFile(
                valuetable,
                strOutputFilename,
                valuestyle,
                out strError);
            if (nRet == -1)
            {
                return(-1);
            }

            return(0);
        }