// 将dt1000 gcs.ini文件中的查重配置升级到dup.xml文件中 /* * [/我的电脑/图书编目] * key1=010$a,50, * key2=200$a,50, * key3=905$d,20, * key4=906$a,50, * key5=986$a,50, * HoldValue=130 * targetDB1=/我的电脑/图书编目, * targetDB2=/我的电脑/图书总库, * */ public static int UpgradeGcsIniDupCfg(string strGcsIniFilename, string strDupXmlFilename, out string strError) { strError = ""; XmlDocument dom = new XmlDocument(); dom.LoadXml("<root />"); // 获得全部section值, List <string> sections = null; int nRet = GetIniSections(strGcsIniFilename, out sections, out strError); if (nRet == -1) { return(-1); } if (nRet == 0) { return(-1); } // 然后看每个section里面有没有一个名为"key1"的entry, // 如果有,就是我们关心的配置section List <string> dbpaths = new List <string>(); for (int i = 0; i < sections.Count; i++) { string strSection = sections[i]; StringBuilder s = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strSection, "key1", "!!!null", s, 255, strGcsIniFilename); string strValue = s.ToString(); if (nRet <= 0 || strValue == "!!!null") { } else { if (IsValidDbPath(strSection) == true) { dbpaths.Add(strSection); } } } // 方案名和发起数据库的关系数组 List <DefaultProjectRelation> relations = new List <DefaultProjectRelation>(); string strToday = DateTime.Now.ToShortDateString(); // 做每个数据库 for (int i = 0; i < dbpaths.Count; i++) { string strDbPath = dbpaths[i]; if (String.IsNullOrEmpty(strDbPath) == true) { continue; } string strThreshold = ""; StringBuilder s = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, "HoldValue", "!!!null", s, 255, strGcsIniFilename); string strValue = s.ToString(); if (strValue != "!!!null") { strThreshold = strValue; } if (String.IsNullOrEmpty(strThreshold) == true) { continue; } // 增加一个<project>元素 XmlNode nodeProject = dom.CreateElement("project"); dom.DocumentElement.AppendChild(nodeProject); string strProjectName = "查重方案" + (i + 1).ToString(); //"查重方案" + (i + 1).ToString() + " " + NewStylePath(strDbPath) DomUtil.SetAttr(nodeProject, "name", strProjectName); DomUtil.SetAttr(nodeProject, "comment", "发起库为 " + NewStylePath(strDbPath) + "," + strToday + " 从dt1000升级上来"); DefaultProjectRelation relation = new DefaultProjectRelation(); relation.StartDbPath = NewStylePath(strDbPath); relation.ProjectName = strProjectName; relations.Add(relation); // 增加若干<database>元素 for (int j = 0; ; j++) { string strEntry = "targetDB" + (j + 1).ToString(); StringBuilder s1 = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, strEntry, "!!!null", s1, 255, strGcsIniFilename); string strLine = s1.ToString(); if (nRet <= 0 || strLine == "!!!null") { break; } string strDatabaseName = ""; string strType = ""; string[] parts = strLine.Split(new char[] { ',' }); if (parts.Length > 0) { strDatabaseName = parts[0].Trim(); } if (parts.Length > 1) { strType = parts[1].Trim(); } XmlNode nodeDatabase = dom.CreateElement("database"); nodeProject.AppendChild(nodeDatabase); DomUtil.SetAttr(nodeDatabase, "name", NewStylePath(strDatabaseName)); DomUtil.SetAttr(nodeDatabase, "threshold", strThreshold); //// // 增加若干<accessPoint>元素 for (int k = 0; ; k++) { string strEntry2 = "key" + (k + 1).ToString(); StringBuilder s2 = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, strEntry2, "!!!null", s2, 255, strGcsIniFilename); string strLine1 = s2.ToString(); if (nRet <= 0 || strLine1 == "!!!null") { break; } string strFromName = ""; string strWeight = ""; string strSearchStyle = ""; string[] parts_of_line = strLine1.Split(new char[] { ',' }); if (parts_of_line.Length > 0) { strFromName = parts_of_line[0].Trim(); } if (parts.Length > 1) { strWeight = parts_of_line[1].Trim(); } if (parts_of_line.Length > 2) { strSearchStyle = parts_of_line[2].Trim(); } if (strSearchStyle == "q") { strSearchStyle = "Left"; } else if (strSearchStyle == "") { strSearchStyle = "Exact"; } XmlNode nodeAccessPoint = dom.CreateElement("accessPoint"); nodeDatabase.AppendChild(nodeAccessPoint); DomUtil.SetAttr(nodeAccessPoint, "name", strFromName); DomUtil.SetAttr(nodeAccessPoint, "weight", strWeight); DomUtil.SetAttr(nodeAccessPoint, "searchStyle", strSearchStyle); } // end of k } // end of j } // end of i // 缺省查重方案定义 // 在根下增加一个<defaultProject>容器元素 XmlNode nodeContainer = dom.CreateElement("defaultProject"); dom.DocumentElement.AppendChild(nodeContainer); for (int i = 0; i < relations.Count; i++) { DefaultProjectRelation relation = relations[i]; XmlNode nodeSourceDatabase = dom.CreateElement("sourceDatabase"); nodeContainer.AppendChild(nodeSourceDatabase); DomUtil.SetAttr(nodeSourceDatabase, "name", relation.StartDbPath); DomUtil.SetAttr(nodeSourceDatabase, "defaultProject", relation.ProjectName); } dom.Save(strDupXmlFilename); return(0); }
// 将dt1000 gcs.ini文件中的查重配置升级到dup.xml文件中 /* [/我的电脑/图书编目] key1=010$a,50, key2=200$a,50, key3=905$d,20, key4=906$a,50, key5=986$a,50, HoldValue=130 targetDB1=/我的电脑/图书编目, targetDB2=/我的电脑/图书总库, * */ public static int UpgradeGcsIniDupCfg(string strGcsIniFilename, string strDupXmlFilename, out string strError) { strError = ""; XmlDocument dom = new XmlDocument(); dom.LoadXml("<root />"); // 获得全部section值, List<string> sections = null; int nRet = GetIniSections(strGcsIniFilename, out sections, out strError); if (nRet == -1) return -1; if (nRet == 0) return -1; // 然后看每个section里面有没有一个名为"key1"的entry, // 如果有,就是我们关心的配置section List<string> dbpaths = new List<string>(); for (int i = 0; i < sections.Count; i++) { string strSection = sections[i]; StringBuilder s = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strSection, "key1", "!!!null", s, 255, strGcsIniFilename); string strValue = s.ToString(); if (nRet <= 0 || strValue == "!!!null") { } else { if (IsValidDbPath(strSection) == true) dbpaths.Add(strSection); } } // 方案名和发起数据库的关系数组 List<DefaultProjectRelation> relations = new List<DefaultProjectRelation>(); string strToday = DateTime.Now.ToShortDateString(); // 做每个数据库 for (int i = 0; i < dbpaths.Count; i++) { string strDbPath = dbpaths[i]; if (String.IsNullOrEmpty(strDbPath) == true) continue; string strThreshold = ""; StringBuilder s = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, "HoldValue", "!!!null", s, 255, strGcsIniFilename); string strValue = s.ToString(); if (strValue != "!!!null") { strThreshold = strValue; } if (String.IsNullOrEmpty(strThreshold) == true) continue; // 增加一个<project>元素 XmlNode nodeProject = dom.CreateElement("project"); dom.DocumentElement.AppendChild(nodeProject); string strProjectName = "查重方案" + (i + 1).ToString(); //"查重方案" + (i + 1).ToString() + " " + NewStylePath(strDbPath) DomUtil.SetAttr(nodeProject, "name", strProjectName); DomUtil.SetAttr(nodeProject, "comment", "发起库为 " + NewStylePath(strDbPath) + "," + strToday + " 从dt1000升级上来"); DefaultProjectRelation relation = new DefaultProjectRelation(); relation.StartDbPath = NewStylePath(strDbPath); relation.ProjectName = strProjectName; relations.Add(relation); // 增加若干<database>元素 for (int j = 0; ; j++) { string strEntry = "targetDB" + (j + 1).ToString(); StringBuilder s1 = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, strEntry, "!!!null", s1, 255, strGcsIniFilename); string strLine = s1.ToString(); if (nRet <= 0 || strLine == "!!!null") break; string strDatabaseName = ""; string strType = ""; string[] parts = strLine.Split(new char[] { ',' }); if (parts.Length > 0) strDatabaseName = parts[0].Trim(); if (parts.Length > 1) strType = parts[1].Trim(); XmlNode nodeDatabase = dom.CreateElement("database"); nodeProject.AppendChild(nodeDatabase); DomUtil.SetAttr(nodeDatabase, "name", NewStylePath(strDatabaseName)); DomUtil.SetAttr(nodeDatabase, "threshold", strThreshold); //// // 增加若干<accessPoint>元素 for (int k = 0; ; k++) { string strEntry2 = "key" + (k + 1).ToString(); StringBuilder s2 = new StringBuilder(255, 255); nRet = API.GetPrivateProfileString(strDbPath, strEntry2, "!!!null", s2, 255, strGcsIniFilename); string strLine1 = s2.ToString(); if (nRet <= 0 || strLine1 == "!!!null") break; string strFromName = ""; string strWeight = ""; string strSearchStyle = ""; string[] parts_of_line = strLine1.Split(new char[] { ',' }); if (parts_of_line.Length > 0) strFromName = parts_of_line[0].Trim(); if (parts.Length > 1) strWeight = parts_of_line[1].Trim(); if (parts_of_line.Length > 2) strSearchStyle = parts_of_line[2].Trim(); if (strSearchStyle == "q") strSearchStyle = "Left"; else if (strSearchStyle == "") strSearchStyle = "Exact"; XmlNode nodeAccessPoint = dom.CreateElement("accessPoint"); nodeDatabase.AppendChild(nodeAccessPoint); DomUtil.SetAttr(nodeAccessPoint, "name", strFromName); DomUtil.SetAttr(nodeAccessPoint, "weight", strWeight); DomUtil.SetAttr(nodeAccessPoint, "searchStyle", strSearchStyle); } // end of k } // end of j } // end of i // 缺省查重方案定义 // 在根下增加一个<defaultProject>容器元素 XmlNode nodeContainer = dom.CreateElement("defaultProject"); dom.DocumentElement.AppendChild(nodeContainer); for (int i = 0; i < relations.Count; i++) { DefaultProjectRelation relation = relations[i]; XmlNode nodeSourceDatabase = dom.CreateElement("sourceDatabase"); nodeContainer.AppendChild(nodeSourceDatabase); DomUtil.SetAttr(nodeSourceDatabase, "name", relation.StartDbPath); DomUtil.SetAttr(nodeSourceDatabase, "defaultProject", relation.ProjectName); } dom.Save(strDupXmlFilename); return 0; }