| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- using UnityEngine.UI;
- namespace Game.Config
- {
- public class CsvReader
- {
- private List<string[]> rowDatas;
- private Dictionary<string, int> fieldKey;
- private string path;
- private Encoding encoding;
- private bool isgb2312;
- private int fieldLine;
- private int typeLine;
- private int startLine;
- public string Name;
- public int StartLine { get { return startLine; } set { startLine = value; } }
- public CsvReader(string csvpath, int fl = 0,int tl = 1 ,int sl = 2,Encoding edg = null)
- {
- if (string.IsNullOrEmpty(csvpath))
- {
- throw new ArgumentNullException("path");
- }
- fieldLine = fl;
- typeLine = tl;
- startLine = sl;
- rowDatas = new List<string[]>();
- fieldKey = new Dictionary<string, int>();
- encoding = edg;
- path = csvpath;
- if (edg == null)
- {
- encoding = Encoding.UTF8;
- isgb2312 = false;
- }
- else if (edg != Encoding.UTF8)
- {
- isgb2312 = true;
- }
- Name =FileHelper.GetName(path);
- ReadFromCsv();
- InitFieldKey();
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="name"></param>
- /// <param name="bytes"></param>
- /// <param name="fl">字段名</param>
- /// <param name="tl">类型名</param>
- /// <param name="sl">多少行开始</param>
- public CsvReader(string name,byte[] bytes,int fl = 0, int tl = 1, int sl = 2)
- {
- fieldLine = fl;
- typeLine = tl;
- startLine = sl;
- rowDatas = new List<string[]>();
- fieldKey = new Dictionary<string, int>();
- isgb2312 = false;
- Name = name;
- ReadFromMemory(bytes);
- InitFieldKey();
- }
- public string[][] RowDatas
- {
- get
- {
- return rowDatas.ToArray();
- }
- }
- public string[] Fields()
- {
- return rowDatas[fieldLine];
- }
- public string GetDataByFieldName(string fieldName,int line)
- {
- string ret = "";
- if (fieldKey.ContainsKey(fieldName) && rowDatas.Count > line)
- {
- ret = rowDatas[line][fieldKey[fieldName]];
- }
- return ret;
- }
- public void SetDataByFieldName(string fieldName, string value,int line)
- {
-
- if (fieldKey.ContainsKey(fieldName) && rowDatas.Count > line)
- {
- rowDatas[line][fieldKey[fieldName]] = value;
- }
-
- }
- public bool HasField(string fieldName)
- {
- return fieldKey.ContainsKey(fieldName);
- }
- public string[] Types()
- {
- return rowDatas[typeLine];
- }
- public string GetString()
- {
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = 0; i < rowDatas.Count; i++)
- {
- stringBuilder.Append(CsvWriter<GameData>.ToCsvLine(rowDatas[i]));
- }
- return stringBuilder.ToString();
- }
- private void ReadFromCsv()//改异步
- {
- string[] datas = File.ReadAllLines(path, encoding);
- if (datas == null || datas.Length <= 0)
- {
- return;
- }
- if (isgb2312)
- {
- for (int i = 0; i < datas.Length; i++)
- {
- datas[i] = FileHelper.GB2312ToUTF8(datas[i]);
- }
- }
- foreach (var item in datas)
- {
- string[] rdt = FileHelper.SpiltData(item);
- rowDatas.Add(rdt);
- }
- }
- private void ReadFromMemory(byte[] bytes)
- {
- string str = Encoding.UTF8.GetString(bytes);
- string[] datas = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- foreach (var item in datas)
- {
- string[] rdt = FileHelper.SpiltData(item);
- rowDatas.Add(rdt);
- }
- }
- private void InitFieldKey()
- {
- string[] fields = rowDatas[fieldLine];
- for (int i = 0; i < fields.Length; i++)
- {
- if (fieldKey.ContainsKey(fields[i]))
- {
- Debug.Log($"Field 重复 :{fields[i]} , i = {i}");
- continue;
- }
- fieldKey.Add(fields[i],i);
- }
- }
-
-
- }
- }
|