using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.IO; using System.Windows.Forms; namespace CheckTool { class ClassCSV { private string[] doc_csv_Shop; private string[] doc_csv_Char; private string[] doc_csv_Fight; private string[] doc_csv_Item; private string[] doc_csv_Package; private string[] doc_csv_Skill; private string[] doc_csv_Weapon; private string[] doc_csv_RandBox; private string[] doc_csv_Limit; private string[] doc_csv_Event; Dictionary<string, string> dicXML_Shop; CheckTool cForm; public ClassCSV(CheckTool CheckFormUse) { cForm = CheckFormUse; dicXML_Shop = new Dictionary<string, string>(); } public bool SetCSV(string strName, string strFilePath) { string[] doc_temp; try { doc_temp = File.ReadAllLines(strFilePath, System.Text.Encoding.Default); } catch (FileLoadException) { // 로드 에러 MessageBox.Show(strFilePath + "파일 로드 중 에러"); return false; } catch (FileNotFoundException) { // 파일이 없음 MessageBox.Show(strFilePath + "파일이 해당 경로에 없음"); return false; } catch (IOException) { // 다른 프로그램에서 이미 사용중 MessageBox.Show(strFilePath + "파일을 다른 프로그램에서 사용중임"); return false; } switch(strName) { case "Shop" : doc_csv_Shop = doc_temp; break; case "Char": doc_csv_Char = doc_temp; break; case "Fight": doc_csv_Fight = doc_temp; break; case "Item": doc_csv_Item = doc_temp; break; case "Package": doc_csv_Package = doc_temp; break; case "Skill": doc_csv_Skill = doc_temp; break; case "Weapon": doc_csv_Weapon = doc_temp; break; case "RandBox": doc_csv_RandBox = doc_temp; break; case "Limit": doc_csv_Limit = doc_temp; break; case "Event": doc_csv_Event = doc_temp; break; } return true; } public bool SetCSVAll(string strFolderPath) { strFolderPath = strFolderPath + @"\"; if( SetCSV("Shop", strFolderPath+ "ShopTable.csv") == false) return false; if ( SetCSV("Char", strFolderPath + "CharacterTable.csv") == false) return false; if (SetCSV("Fight", strFolderPath + "FightTable.csv") == false) return false; if (SetCSV("Item", strFolderPath + "ItemTable.csv") == false) return false; if (SetCSV("Package", strFolderPath + "PackageTable.csv") == false) return false; if (SetCSV("Skill", strFolderPath + "SkillTable.csv") == false) return false; if (SetCSV("Weapon", strFolderPath + "Weapon.csv") == false) return false; if (SetCSV("RandBox", strFolderPath + "RandBoxTable.csv") == false) return false; if (SetCSV("Limit", strFolderPath + "LimitItemTable.csv") == false) return false; if (SetCSV("Event", strFolderPath + "EventItemTable.csv") == false) return false; return true; } public void CompShopChar() { // Shop엔 있고 Character엔 없는 것 cForm.OutputTxt("== CharacterTable.csv & ShopTable.csv (CharacterTable에 없는 ShopTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from shop in doc_csv_Shop let sh = shop.Split(',') where !(from char_ in doc_csv_Char let ch = char_.Split(',') select ch[1]) .Contains(sh[1]) && sh[3] == "1" // 타입이 1인것(캐릭터) select sh[1] + "," + sh[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompSkillFight() { // Skill에 이 있는 ID가 Fight에 없을때 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== FightTable.csv & SkillTable.csv (FightTable에 없는 SkillTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from skill in doc_csv_Skill let sk = skill.Split(',') where !(from fight in doc_csv_Fight let fi = fight.Split(',') where fi[3].StartsWith("3") //3은 스킬 select fi[1]) // ID .Contains(sk[1]) //ID select sk[1] + "," + sk[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopFight() { // Fight엔 있고 Shop엔 없는 것 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== ShopTable.csv & FightTable.csv (FightTable에 없는 ShopTable ID) =="); IEnumerable<string> Query = from fight in doc_csv_Fight let fi = fight.Split(',') where !(from shop in doc_csv_Shop let sh = shop.Split(',') select sh[1]) // ID .Contains(fi[3]) //Code_ID select fi[3] + "," + fi[18]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopItem() { // Shop엔 있고 Item엔 없는 것 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== ShopTable.csv & ItemTable.csv (ItemTable에 없는 ShopTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from shop in doc_csv_Shop let sh = shop.Split(',') where !(from item in doc_csv_Item let it = item.Split(',') select it[1]) .Contains(sh[1]) && (sh[3] == "2" || sh[3] == "7" || sh[3] =="8") // 타입이 2(무기), 7(기능성), 8(알) select sh[1] + "," + sh[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopSkill() { // Shop엔 있고 Skill엔 없는 것 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== ShopTable.csv & SkillTable.csv (SkillTable에 없는 ShopTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from shop in doc_csv_Shop let sh = shop.Split(',') where !(from skill in doc_csv_Skill let sk = skill.Split(',') select sk[1]) .Contains(sh[1]) && (sh[3] == "3") // 타입이 3(스킬) select sh[1] + "," + sh[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopRandBox(){ // RandBox에 있는 데이터와 Shop 데이터 비교 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== RandBoxTable.csv & ShopTable.csv (Type, Value) 비교 =="); cForm.OutputTxt("-- GetItem_ID, Get_Type, Get_Value --"); IEnumerable<string> Query = from rand in doc_csv_RandBox let ra = rand.Split(',') from shop in doc_csv_Shop let sh = shop.Split(',') //Value까지 고려 한거 where (ra[3] == sh[1]) && ((ra[4] != sh[5]) || (ra[5] != sh[6] && ra[5] != sh[8] && ra[5] != sh[10] && ra[5] != sh[12] && ra[5] != sh[14])) //Value고려하지 않은거. //where (ra[3] == sh[1]) && (ra[4] != sh[5]) //select rand; //ra[3] GenItem_ID, ra[4] Get_Type, ra[5] Get_value, ra[7] Note select ra[3] + "," + ra[4] + "," + ra[5] + "," + ra[7]; foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopWeapon(){ // Shop엔 있고 Weapon엔 없는 것 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== Weapon.csv & ShopTable.csv (Weapon에 없는 ShopTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from shop in doc_csv_Shop let sh = shop.Split(',') where !(from weapon in doc_csv_Weapon let we = weapon.Split(',') select we[0]) .Contains(sh[1]) //&& (sh[3] == "2") // Type 2는 무기 && (sh[1].StartsWith("25")) // 25로 시작하는건 무기 //select weapon; //sh[1] id, sh[2] Name select sh[1] + "," + sh[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompItemWeapon() { // Weapon엔 있고 Item엔 없는 것 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== Weapon.csv & ItemTable.csv (Weapon에 없는 ItemTable ID) =="); cForm.OutputTxt("-- ID, Name --"); IEnumerable<string> Query = from item in doc_csv_Item let it = item.Split(',') where !(from weapon in doc_csv_Weapon let we = weapon.Split(',') select we[0]) .Contains(it[1]) && it[1].StartsWith("25") // 25로 시작하는건 무기 //select weapon; //it[1] ID, it[2] name select it[1] + "," + it[2]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } } public void CompShopPackage() { // Package에 있는 데이터와 Shop 데이터 비교 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== PackageTable.csv & ShopTable.csv (Type) 비교 =="); for(int i = 0, j = 1; j <= 5 ; i = i+3, j++) { cForm.OutputTxt("-- Code, Type, Name " + j.ToString() + "--"); IEnumerable<string> Query = from pack in doc_csv_Package let pa = pack.Split(',') from shop in doc_csv_Shop let sh = shop.Split(',') //Value 고려 //where (pa[i + 5] == sh[1]) && ((pa[i + 6] != sh[5]) || (pa[i + 7] != sh[6] && pa[i + 7] != sh[8] && pa[i + 7] != sh[10] && pa[i + 7] != sh[12] && pa[i + 7] != sh[14])) //Value 뺌 where (pa[i + 5] == sh[1]) && (pa[i + 6] != sh[5]) //select pack; //pa[i+5] Codei, pa[i+6] Typei, pa[i+7] Value, sh[2] Name //Value 뺌 //select pa[i + 5] + "," + pa[i + 6] + "," + pa[i + 7] + "," + sh[2]; select pa[i + 5] + "," + pa[i + 6] + "," + sh[2]; foreach (var data in Query) { cForm.OutputError(data); } } } public void CompShopLimit() { // LimitItem과 shop과 비교 cForm.OutputTxt("" + '\r' + '\n'); //cForm.OutputTxt("== LimitItemTable.csv 데이터와 ShopTable.csv 데이터 일치하지 않는 것 =="); cForm.OutputTxt("== LimitItemTable.csv & ShopTable.csv (ID, StartDay, EndDay) 비교 =="); cForm.OutputTxt("-- ID, Name, StartDay, EndDay --"); IEnumerable<string> Query = from limit in doc_csv_Limit let li = limit.Split(',') where !(from shop in doc_csv_Shop let sh = shop.Split(',') select sh[1]) .Contains(li[0]) //select weapon; //it[1] ID, it[2] name select li[0] + "," + li[1] + "," + li[2] + "," + li[3]; Query = Query.Skip(1); foreach (var data in Query) { cForm.OutputError(data); } IEnumerable<string> Query2 = from limit in doc_csv_Limit let li = limit.Split(',') from shop in doc_csv_Shop let sh = shop.Split(',') where (li[0] == sh[1]) && ((li[2] != sh[21]) || (li[3] != sh[22])) //li[0] : ID, li[1] : Name, li[2] : StartDay, li[3] : EndDay select li[0] + "," + li[1] + "," + li[2] + "," + li[3]; foreach (var data in Query2) { cForm.OutputError(data); } } public void CompShopEvent(){ // Event와 Shop 비교 cForm.OutputTxt("" + '\r' + '\n'); cForm.OutputTxt("== EventTable.csv & ShopTable.csv (Get_Type) 비교 =="); cForm.OutputTxt("-- ID, Name, Get_Type --"); IEnumerable<string> Query = from event_ in doc_csv_Event let ev = event_.Split(',') from shop in doc_csv_Shop let sh = shop.Split(',') where ev[1] == sh[1] && ev[2] != sh[5] // ev[1] ID, ev[5] Name, ev[2] Get_Type select ev[1] + "," + ev[5] + "," + ev[2]; foreach (var data in Query) { cForm.OutputError(data); } } } }
c#
- Linq 이용해서 CSV 로드 2009.12.15
Linq 이용해서 CSV 로드
2009. 12. 15. 13:39