Ejemplo n.º 1
0
            public bool MoveNext()
            {
                while (this.stack.Count > 0)
                {
                    var itr = this.stack.Peek();
                    if (this.needMoveNext && !itr.MoveNext())
                    {
                        return(false);
                    }

                    this.needMoveNext = false;

                    var r = itr.Current;
                    if (r == null)
                    {
                        return(false);
                    }

                    if (r.Records.Count > 0)
                    {
                        itr = new RecordIterator(itr.Current, -1, this.forward);
                        this.stack.Push(itr);
                    }

                    while (true)
                    {
                        bool ok = itr.MoveNext();
                        if (ok)
                        {
                            return(true);
                        }

                        this.stack.Pop();
                        if (this.stack.Count == 0)
                        {
                            return(false);
                        }

                        itr = this.stack.Peek();
                    }
                }

                return(false);
            }
Ejemplo n.º 2
0
            /// <summary>
            /// If a record contains a field that can't be parsed as a double, the whole
            /// record is skipped.
            /// </summary>
            public static IDataSeries[] ReadDataSeries(RecordIterator it, bool useHeaders)
            {
                if (!it.MoveNext())
                {
                    return(null);
                }
                IList <string> record = it.Current;
                // read first record
                int columns = record.Count;

                if (columns < 1)
                {
                    throw new ArgumentException();
                }
                DataSeries.ListDataSeries[] serieses = new DataSeries.ListDataSeries[columns];
                for (int col = 0; col < columns; col++)
                {
                    DataSeries.ListDataSeries series = new DataSeries.ListDataSeries("y" + col);
                    if (col == 0)
                    {
                        series.SetName("x");
                    }
                    else
                    {
                        series.SetDomain(serieses[0]);
                    }
                    serieses[col] = series;
                }
                if (useHeaders)
                {
                    // first record contains header strings
                    for (int i = 0; i < record.Count && i < serieses.Length; i++)
                    {
                        serieses[i].SetName(record[i]);
                    }
                    record = it.Current;
                }
                while (true)
                {
                    try
                    {
                        double[] values = new double[columns];
                        for (int col_1 = 0; col_1 < columns; col_1++)
                        {
                            values[col_1] = double.ValueOf(record[col_1]);
                        }
                        for (int col_2 = 0; col_2 < columns; col_2++)
                        {
                            serieses[col_2].Add(values[col_2]);
                        }
                    }
                    catch (NumberFormatException)
                    {
                    }
                    // skip whole record
                    if (!it.MoveNext())
                    {
                        break;
                    }
                    record = it.Current;
                }
                return(serieses);
            }