Beispiel #1
0
 public StateCol(enReadState s, bool addValue)
 {
     RowEnd = false; AddValue = addValue; NeedChange = true; StateTo = s;
 }
Beispiel #2
0
 public StateCol(bool rowEnd)
 {
     RowEnd = true; AddValue = false; NeedChange = true; StateTo = enReadState.FieldStart;
 }
Beispiel #3
0
 public StateCol()
 {
     RowEnd = false; AddValue = false; NeedChange = false; StateTo = enReadState.Error;
 }
Beispiel #4
0
 public StateRow(enReadState s, bool addValue)
 {
     AddValue = addValue; NeedChange = true; StateTo = s;
 }
Beispiel #5
0
 public StateRow(enReadState s)
 {
     AddValue = false; NeedChange = true; StateTo = s;
 }
Beispiel #6
0
 public StateRow()
 {
     AddValue = false; NeedChange = false; StateTo = enReadState.Error;
 }
Beispiel #7
0
        //读取一个单元格的数据,返回值为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);
        }