|
/*
* Copyright (c) 2013, Yuriy Nelipovich
*
* If you find this code useful or in case of any questions, suggestions
* bug reports, donation, please email me: dev.yuriy.n@gmail.com
*/
using System;
using System.IO;
using System.Linq;
namespace LogJoin
{
/// <summary>
/// Sequence of text portions, each portion is a line.
/// </summary>
public class Input : IDisposable
{
private readonly StreamReader[] _readers;
private readonly FileStream[] _streams;
private int _lastSourceIndex;
/// <summary>
/// Contstructs new input
/// </summary>
/// <param name="filePaths">Sequence of files to read</param>
public Input(string[] filePaths)
{
if (filePaths.Length == 0)
throw new ArgumentException("Empty file list");
this._streams =
filePaths.Select(p => new FileStream(p, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)).ToArray();
this._readers = this._streams.Select(s => new StreamReader(s)).ToArray();
}
public void Dispose()
{
foreach (var r in this._readers)
{
r.Dispose();
}
foreach (var s in this._streams)
{
s.Dispose();
}
}
/// <summary>
/// Moves the input to the start position
/// </summary>
public virtual void ResetPosition()
{
this._lastSourceIndex = 0;
foreach (var stream in this._streams.Where(stream => stream.CanSeek))
{
stream.Seek(0, SeekOrigin.Begin);
}
}
/// <summary>
/// Rads the next text portion and moves to the next position
/// </summary>
/// <returns>The text portion of null if there is nothing to read</returns>
public virtual string ReadTextPortion()
{
var line = this._readers[this._lastSourceIndex].ReadLine();
if (line != null)
return line;
if (this._lastSourceIndex < this._readers.Length - 1)
{
this._lastSourceIndex++;
return this.ReadTextPortion();
}
return null;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.