You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.5 KiB
167 lines
4.5 KiB
1 month ago
|
using System;
|
||
|
using System.Collections;
|
||
|
|
||
|
namespace Sog
|
||
|
{
|
||
|
public class TabTextFile
|
||
|
{
|
||
|
private string FileName;
|
||
|
private string[] Titles;
|
||
|
private string[] Types;
|
||
|
private ArrayList Body;
|
||
|
public int CurrentLine { get; private set; }
|
||
|
|
||
|
public TabTextFile(string strFileName, string strContent)
|
||
|
{
|
||
|
FileName = strFileName;
|
||
|
string[] content = strContent.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||
|
|
||
|
//头2行分别是字段名字和类型
|
||
|
Titles = content[0].Split(new char[] { '\t' });
|
||
|
Types = content[1].Split(new char[] { '\t' });
|
||
|
|
||
|
Body = new ArrayList();
|
||
|
for (int i = 2; i < content.Length; i++)
|
||
|
{
|
||
|
string[] line = content[i].Split(new char[] { '\t' });
|
||
|
Body.Add(line);
|
||
|
}
|
||
|
Body.TrimToSize();
|
||
|
Begin();
|
||
|
}
|
||
|
|
||
|
public void Begin()
|
||
|
{
|
||
|
CurrentLine = -1;
|
||
|
}
|
||
|
|
||
|
public bool Next()
|
||
|
{
|
||
|
CurrentLine++;
|
||
|
if (CurrentLine >= Body.Count)
|
||
|
return false;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public void SetCurrentLine(int currentLine)
|
||
|
{
|
||
|
CurrentLine = currentLine;
|
||
|
}
|
||
|
|
||
|
public int TotalLine()
|
||
|
{
|
||
|
return Body.Count;
|
||
|
}
|
||
|
|
||
|
public T Get<T>(string strColName)
|
||
|
{
|
||
|
int nColIndex = Array.IndexOf(Titles, strColName);
|
||
|
if (nColIndex < 0)
|
||
|
{
|
||
|
TraceLog.Error("TabFile: read data error, file:{0}, colName:{1}", FileName, strColName);
|
||
|
return default(T);
|
||
|
}
|
||
|
return this.Get<T>(nColIndex);
|
||
|
}
|
||
|
|
||
|
public T Get<T>(int nColIndex)
|
||
|
{
|
||
|
string strValue = this.getValueString(nColIndex);
|
||
|
Type t = typeof(T);
|
||
|
try
|
||
|
{
|
||
|
return (T)Convert.ChangeType(strValue, t);
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
TraceLog.Error("TabFile: {0} Wrong Format: {1}:{2}", FileName, nColIndex, CurrentLine);
|
||
|
}
|
||
|
return default(T);
|
||
|
}
|
||
|
|
||
|
private string getValueString(int nColIndex)
|
||
|
{
|
||
|
string[] line = (string[])Body[CurrentLine];
|
||
|
if (nColIndex < 0 || nColIndex >= line.Length)
|
||
|
{
|
||
|
TraceLog.Error("TabFile:" + FileName + " Wrong ColIndex: " + nColIndex + " At Line: " + CurrentLine);
|
||
|
return null;
|
||
|
}
|
||
|
string value = line[nColIndex];
|
||
|
|
||
|
return value.Replace("\\n","\n");
|
||
|
|
||
|
//return line[nColIndex];
|
||
|
}
|
||
|
|
||
|
public string GetString(string strColName)
|
||
|
{
|
||
|
int nColIndex = Array.IndexOf(Titles, strColName);
|
||
|
return getValueString(nColIndex);
|
||
|
}
|
||
|
|
||
|
public int GetInt32(string strColName)
|
||
|
{
|
||
|
return GetInt32(Array.IndexOf(Titles, strColName));
|
||
|
}
|
||
|
|
||
|
public int GetInt32(int nColIndex)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return Convert.ToInt32(getValueString(nColIndex));
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
TraceLog.Error("TabFile: " + FileName + "Wrong Format: " + nColIndex + " : " + CurrentLine);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public uint GetUInt32(string strColName)
|
||
|
{
|
||
|
return GetUInt32(Array.IndexOf(Titles, strColName));
|
||
|
}
|
||
|
|
||
|
public uint GetUInt32(int nColIndex)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return Convert.ToUInt32(getValueString(nColIndex));
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
TraceLog.Error("TabFile: " + FileName + "Wrong Format: " + nColIndex + " : " + CurrentLine);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public double GetDouble(string strColName)
|
||
|
{
|
||
|
return GetDouble(Array.IndexOf(Titles, strColName));
|
||
|
}
|
||
|
|
||
|
public double GetDouble(int nColIndex)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return Convert.ToDouble(getValueString(nColIndex));
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
TraceLog.Error("TabFile: " + FileName + "Wrong Format: " + nColIndex + " : " + CurrentLine);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public float GetFloat(string strColName)
|
||
|
{
|
||
|
return (float)GetDouble(strColName);
|
||
|
}
|
||
|
|
||
|
public float GetFloat(int nColIndex)
|
||
|
{
|
||
|
return (float)GetDouble(nColIndex);
|
||
|
}
|
||
|
}
|
||
|
}
|