源战役客户端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 

113 řádky
4.3 KiB

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]);
}
}
}
/// <summary>
/// 读取CSV文件
/// 结果保存到字典集合,以ID作为Key值,对应每一行的数据,每一行的数据也用字典集合保存。
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static Dictionary<string, Dictionary<string, string>> LoadCsvFile(string filePath)
{
Dictionary<string, Dictionary<string, string>> result = new Dictionary<string, Dictionary<string, string>>();
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<string, string>();
for (int j = 0; j < line.Length; j++)
{
/* 每一行的数据存储规则:Key字段-Value值 */
result[ID][keys[j]] = line[j];
}
}
return result;
}
/// <summary>
/// 读取CSV文件数据(利用反射)
/// </summary>
/// <typeparam name="CsvData">CSV数据对象的类型</typeparam>
/// <param name="csvFilePath">CSV文件路径</param>
/// <param name="csvDatas">用于缓存数据的字典</param>
/// <returns>CSV文件所有行内容的数据对象</returns>
public static Dictionary<int, SaveWaitQueueCsvData> LoadCsvData<SaveWaitQueueCsvData>(string csvFilePath)
{
Dictionary<int, SaveWaitQueueCsvData> dic = new Dictionary<int, SaveWaitQueueCsvData>();
/* 从CSV文件读取数据 */
Dictionary<string, Dictionary<string, string>> result = LoadCsvFile(csvFilePath);
/* 遍历每一行数据 */
foreach (string ID in result.Keys)
{
/* CSV的一行数据 */
Dictionary<string, string> datas = result[ID];
/* 读取Csv数据对象的属性 */
PropertyInfo[] props = typeof(SaveWaitQueueCsvData).GetProperties();
/* 使用反射,将CSV文件的数据赋值给CSV数据对象的相应字段,要求CSV文件的字段名和CSV数据对象的字段名完全相同 */
SaveWaitQueueCsvData obj = Activator.CreateInstance<SaveWaitQueueCsvData>();
foreach (PropertyInfo pi in props)
{
pi.SetValue(obj, Convert.ChangeType(datas[pi.Name], pi.PropertyType), null);
}
/* 按ID-数据的形式存储 */
dic[Convert.ToInt32(ID)] = obj;
}
return dic;
}
}
/// <summary>
/// 对待检测的特效列表临时保存
/// </summary>
public class SaveWaitQueueCsvData:CSVOptionTool
{
public int ID { get; set; }
public string Name { get; set; }
}
/// <summary>
/// 检测结果保存
/// </summary>
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率
}