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);
}
}
}
}