MonodroidStockPortfolio/MonoDroid.FileHelpers/Core/ForwardReader.cs

165 lines
No EOL
2.8 KiB
C#

using System;
using System.Globalization;
using System.IO;
using System.Text;
namespace FileHelpers
{
internal sealed class ForwardReader
{
TextReader mReader;
private string[] mFowardStrings;
private int mForwardIndex = 0;
internal char[] mEOF = StringHelper.NewLine.ToCharArray();
internal int mCapacityHint = 64;
private int mRemaingLines = 0;
public int RemainingLines
{
get { return mRemaingLines; }
}
private int mLineNumber = 0;
public int LineNumber
{
get {return mLineNumber - 1;}
}
//
// int mPos = 0;
// int MaxRecordSize = 1024 * 8;
// char[] mBuffer;
//
internal ForwardReader(TextReader reader)
: this(reader, 0, 0)
{
}
internal ForwardReader(TextReader reader, int forwardLines):
this(reader, forwardLines, 0)
{
}
internal ForwardReader(TextReader reader, int forwardLines, int startLine)
{
mReader = reader;
mFowardLines = forwardLines;
mLineNumber = startLine;
mFowardStrings = new string[mFowardLines + 1];
mRemaingLines = mFowardLines + 1;
for (int i = 0; i < mFowardLines + 1; i++)
{
mFowardStrings[i] = mReader.ReadLine();
mLineNumber++;
if (mFowardStrings[i] == null)
{
mRemaingLines = i;
break;
}
}
}
// public string ReadToDelimiter(string del)
// {
// //StringBuilder builder = new StringBuilder(mCapacityHint);
//
// int right = mPos;
// while (true)
// {
// mReader.
//
// //mReader.Read()
//
// }
//
//
//
// if (builder.Length > 0)
// {
// return builder.ToString();
// }
// return null;
// }
private bool mDiscardForward = false;
public bool DiscardForward
{
get { return mDiscardForward; }
set { mDiscardForward = value; }
}
private int mFowardLines = 0;
public int FowardLines
{
get { return mFowardLines; }
}
public string ReadNextLine()
{
if (mRemaingLines <= 0)
return null;
else
{
string res = mFowardStrings[mForwardIndex];
if (mRemaingLines == (mFowardLines + 1))
{
mFowardStrings[mForwardIndex] = mReader.ReadLine();
mLineNumber++;
if (mFowardStrings[mForwardIndex] == null)
{
mRemaingLines--;
}
}
else
{
mRemaingLines--;
if (mDiscardForward)
return null;
}
mForwardIndex = (mForwardIndex + 1)%(mFowardLines + 1);
return res;
}
}
public string RemainingText
{
get
{
StringBuilder sb = new StringBuilder(100);
for (int i = 0; i < mRemaingLines + 1; i++)
{
sb.Append(mFowardStrings[(mForwardIndex + i)%(mFowardLines + 1)] + StringHelper.NewLine);
}
return sb.ToString();
}
}
public void Close()
{
mReader.Close();
}
}
}