public StateCol(enReadState s, bool addValue) { RowEnd = false; AddValue = addValue; NeedChange = true; StateTo = s; }
public StateCol(bool rowEnd) { RowEnd = true; AddValue = false; NeedChange = true; StateTo = enReadState.FieldStart; }
public StateCol() { RowEnd = false; AddValue = false; NeedChange = false; StateTo = enReadState.Error; }
public StateRow(enReadState s, bool addValue) { AddValue = addValue; NeedChange = true; StateTo = s; }
public StateRow(enReadState s) { AddValue = false; NeedChange = true; StateTo = s; }
public StateRow() { AddValue = false; NeedChange = false; StateTo = enReadState.Error; }
//读取一个单元格的数据,返回值为false表示读取不到数据或者出错了 public bool Read() { if (m_state == enReadState.Error) { return(false); } //到最尾了 if (m_idx >= m_bufferLength) { m_isEndOfRow = true; if (m_value.Length > 0) { m_value.Remove(0, m_value.Length); } return(false); } //检错下 if (m_state != enReadState.FieldStart) { Debuger.LogError("逻辑出错"); m_state = enReadState.FieldStart; } //初始化下 bool oldEndOfRow = m_isEndOfRow; m_isEndOfRow = false; if (m_value.Length > 0) { m_value.Remove(0, m_value.Length); } //开始逐个解析 char c; StateRow table; StateCol handle; do { c = m_buffer[m_idx++]; table = s_parseTable[m_state]; handle = table[c]; if (handle != null) { if (handle.NeedChange) { m_state = handle.StateTo; } if (handle.AddValue) { m_value.Append(c); } if (handle.RowEnd) { m_isEndOfRow = true; if (m_state != enReadState.FieldStart) { Debuger.LogError(string.Format("没有读取完却标志了换行标识 行:{0} 列:{1}", m_row, m_col)); } } } else if (table.NeedChange) { m_state = table.StateTo; if (table.AddValue) { m_value.Append(c); } } else { m_value.Append(c); } if (m_state == enReadState.FieldStart || (m_idx >= m_bufferLength && m_state == enReadState.NonQuotesField) || (m_idx >= m_bufferLength && m_state == enReadState.QuoteInQuotesField)) { //计算行列 if (oldEndOfRow) { ++m_row; m_col = 0; } else { ++m_col; } return(true); } //判断各种出错情况 if (m_state == enReadState.Error || m_idx >= m_bufferLength) { //if (m_value.Length > 0)m_value.Remove(0, m_value.Length); m_state = enReadState.Error; return(false); } }while(true); }