using System;
using System.Collections.Generic;
using System.Reflection;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
public class CSVOptionTool
{
//csv文件写入
public static void WriteCsv(string[] strs, string path)
{
if (!File.Exists(path))
{
File.Create(path).Dispose();
}
using (StreamWriter stream = new StreamWriter(path, false, Encoding.UTF8))
{
for (int i = 0; i < strs.Length; i++)
{
if (strs[i] != null)
stream.WriteLine(strs[i]);
}
}
}
///
/// 读取CSV文件
/// 结果保存到字典集合,以ID作为Key值,对应每一行的数据,每一行的数据也用字典集合保存。
///
///
///
public static Dictionary> LoadCsvFile(string filePath)
{
Dictionary> result = new Dictionary>();
string[] fileData = File.ReadAllLines(filePath);
/* CSV文件的第一行为Key字段,第二行开始是数据。第一个字段一定是ID。 */
string[] keys = fileData[0].Split(',');
for (int i = 1; i < fileData.Length; i++)
{
string[] line = fileData[i].Split(',');
/* 以ID为key值,创建一个新的集合,用于保存当前行的数据 */
string ID = line[0];
result[ID] = new Dictionary();
for (int j = 0; j < line.Length; j++)
{
/* 每一行的数据存储规则:Key字段-Value值 */
result[ID][keys[j]] = line[j];
}
}
return result;
}
///
/// 读取CSV文件数据(利用反射)
///
/// CSV数据对象的类型
/// CSV文件路径
/// 用于缓存数据的字典
/// CSV文件所有行内容的数据对象
public static Dictionary LoadCsvData(string csvFilePath)
{
Dictionary dic = new Dictionary();
/* 从CSV文件读取数据 */
Dictionary> result = LoadCsvFile(csvFilePath);
/* 遍历每一行数据 */
foreach (string ID in result.Keys)
{
/* CSV的一行数据 */
Dictionary datas = result[ID];
/* 读取Csv数据对象的属性 */
PropertyInfo[] props = typeof(SaveWaitQueueCsvData).GetProperties();
/* 使用反射,将CSV文件的数据赋值给CSV数据对象的相应字段,要求CSV文件的字段名和CSV数据对象的字段名完全相同 */
SaveWaitQueueCsvData obj = Activator.CreateInstance();
foreach (PropertyInfo pi in props)
{
pi.SetValue(obj, Convert.ChangeType(datas[pi.Name], pi.PropertyType), null);
}
/* 按ID-数据的形式存储 */
dic[Convert.ToInt32(ID)] = obj;
}
return dic;
}
}
///
/// 对待检测的特效列表临时保存
///
public class SaveWaitQueueCsvData:CSVOptionTool
{
public int ID { get; set; }
public string Name { get; set; }
}
///
/// 检测结果保存
///
public class SaveResultCsvData:CSVOptionTool
{
public string Name { get; set; }//特效名
public float PictureMemory { get; set; }//贴图所占用的内存
public long PictureNum { get; set; }//贴图数量
public long GrainCompNum { get; set; }//所有粒子系统组件数量
public int DrawCallNum { get; set; }//DrawCall
public long GrainNum { get; set; }//粒子数量
public string ExtraDes { get; set; }//额外描述
// public float PixelNum1 { get; set; }//特效原填充像素点
// public float PixelNum2 { get; set; }//特效实际填充像素点
// public float PixelOverdraw { get; set; }//平均每像素overdraw率
}