public static CsvData GetValidCsvData(string csvText, GlobalCCSettings gSettings) { var csvAsList = CsvParser.ReadAsList(csvText); CsvData csvData = new CsvData(); csvData.SetFromList(csvAsList); // END マーカーが有効な場合は END 以下を無視するようにする. if (gSettings.isEndMarkerEnabled) { int endMarkerIndex = gSettings.columnIndexOfEndMarker; string marker = gSettings.endMarker; if (endMarkerIndex < 0 || csvData.col <= endMarkerIndex) { throw new Exception("無効な columnIndexOfEndMarker です: " + endMarkerIndex); } for (int i = 0; i < csvData.row; i++) { if (csvData.Get(i, endMarkerIndex).Trim() == marker) { csvData = csvData.Slice(0, i); break; } } } // 無効な列を除外する csvData = csvData.SliceColumn(gSettings.columnIndexOfTableStart); return(csvData); }
public static void CreateAssets(ConvertSetting s, GlobalCCSettings gSettings) { string settingPath = s.GetDirectoryPath(); string csvPath = CCLogic.GetFilePathRelativesToAssets(settingPath, s.GetCsvPath(gSettings)); TextAsset textAsset = AssetDatabase.LoadAssetAtPath <TextAsset>(csvPath); if (textAsset == null) { Debug.LogError("Not found : " + csvPath); return; } if (s.isEnum) { return; } // csv ファイルから読み込み CsvData csv = CsvLogic.GetValidCsvData(textAsset.text, gSettings); CsvData contents = csv.Slice(gSettings.rowIndexOfContentStart); Field[] fields = CsvLogic.GetFieldsFromHeader(csv, gSettings); // アセットを生成する. AssetsGenerator assetsGenerator = new AssetsGenerator(s, fields, contents); // カスタムアセットタイプを設定する // これはプロジェクト固有のアセットをテーブルでセット出来るようにする. { Type[] customAssetTypes = new Type[gSettings.customAssetTypes.Length]; for (int i = 0; i < customAssetTypes.Length; i++) { if (TryGetTypeWithError(gSettings.customAssetTypes[i], out var type, s.checkFullyQualifiedName)) { customAssetTypes[i] = type; }
public static void GenerateCode(ConvertSetting s, GlobalCCSettings gSettings) { string settingPath = s.GetDirectoryPath(); string csvPath = CCLogic.GetFilePathRelativesToAssets(settingPath, s.GetCsvPath(gSettings)); TextAsset textAsset = AssetDatabase.LoadAssetAtPath <TextAsset>(csvPath); if (textAsset == null) { Debug.LogError("Not found : " + csvPath); return; } string directoryPath = CCLogic.GetFullPath(settingPath, s.codeDestination); if (!Directory.Exists(directoryPath)) { Debug.LogError("Not found directory: " + directoryPath); return; } CsvData csv = CsvLogic.GetValidCsvData(textAsset.text, gSettings); if (s.isEnum) { CsvData headers = csv.Slice(gSettings.rowIndexOfName, gSettings.rowIndexOfName + 1); CsvData contents = csv.Slice(gSettings.rowIndexOfEnumContentStart); string code = EnumGenerator.Generate(s.className, headers, contents, s.verbose); string filePath = Path.Combine(directoryPath, s.className + ".cs"); using (StreamWriter writer = File.CreateText(filePath)) { writer.WriteLine(code); } Debug.LogFormat("Create \"{0}\"", filePath); } else { Field[] fields = CsvLogic.GetFieldsFromHeader(csv, gSettings); if (s.classGenerate) { string code = ClassGenerator.GenerateClass(s.className, fields, s.IsPureClass); string filePath = Path.Combine(directoryPath, s.className + ".cs"); using (StreamWriter writer = File.CreateText(filePath)) { writer.WriteLine(code); } Debug.LogFormat("Create \"{0}\"", filePath); } if (s.tableClassGenerate) { int[] keyIndexes = ClassGenerator.FindKeyIndexes(s, fields); string[] keys = s.keys; Field[] key = null; if (keyIndexes.Length > 0) { List <Field> keyFieldList = new List <Field>(); for (int i = 0; i < keyIndexes.Length; i++) { keyFieldList.Add(fields[keyIndexes[i]]); } key = keyFieldList.ToArray(); } string code = ClassGenerator.GenerateTableClass(s, s.TableClassName, key); string filePath = Path.Combine(directoryPath, s.TableClassName + ".cs"); using (StreamWriter writer = File.CreateText(filePath)) { writer.WriteLine(code); } Debug.LogFormat("Create \"{0}\"", filePath); } } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
public static Field[] GetFieldsFromHeader(CsvData csv, GlobalCCSettings gSettings) { CsvData nameHeaders = csv.Slice(gSettings.rowIndexOfName, gSettings.rowIndexOfName + 1); CsvData typeHeaders = csv.Slice(gSettings.rowIndexOfType, gSettings.rowIndexOfType + 1); var fields = new Field[csv.col]; for (int i = 0; i < fields.Length; i++) { fields[i] = new Field(); } // enabled check if (gSettings.rowIndexOfEnabledColumn != -1) { CsvData enabledHeaders = csv.Slice(gSettings.rowIndexOfEnabledColumn, gSettings.rowIndexOfEnabledColumn + 1); for (int col = 0; col < csv.col; col++) { string enabledCell = enabledHeaders.Get(0, col); if (!GetEnabledColumn(enabledCell)) { fields[col].isValid = false; } } } // get field names; for (int col = 0; col < csv.col; col++) { string fieldName = nameHeaders.Get(0, col); fieldName = fieldName.Trim(); if (fieldName == string.Empty) { fields[col].isValid = false; continue; } fields[col].fieldName = fieldName; } // set field types; for (int col = 0; col < csv.col; col++) { if (!fields[col].isValid) { continue; } string typeName = typeHeaders.Get(0, col).Trim(); if (typeName == string.Empty) { fields[col].isValid = false; continue; } fields[col].typeName = typeName; } return(fields); }