Extract TrackingTextReader from CsvIndexer.

This commit is contained in:
2023-08-01 14:58:09 +02:00
parent 5ea825a8d9
commit 67578d022f
4 changed files with 54 additions and 44 deletions

View File

@@ -51,38 +51,11 @@ namespace CsvView.Code
}
}
private class TrackingTextReader : TextReader
{
private readonly TextReader _baseReader;
private int _position;
public TrackingTextReader(TextReader baseReader)
{
_baseReader = baseReader;
}
public override int Read()
{
_position++;
return _baseReader.Read();
}
public override int Peek()
{
return _baseReader.Peek();
}
public int Position
{
get { return _position; }
}
}
public void GenerateIndex(string file)
{
_insideString = false;
_index.Clear();
FileStream stream = new FileStream(file, FileMode.Open);
using (FileStream stream = new FileStream(file, FileMode.Open))
using (StreamReader streamReader = new StreamReader(stream, Encoding.Default, true, 4096))
using (TrackingTextReader reader = new TrackingTextReader(streamReader))
{
@@ -100,7 +73,6 @@ namespace CsvView.Code
}
}
}
stream.Close();
}
private void Index_SaveFile(string indexFile)
@@ -123,7 +95,7 @@ namespace CsvView.Code
private static List<long> Index_LoadFile(string indexFile)
{
var tempIndex = new List<long>();
List<long> tempIndex = new List<long>();
Stream streamIn = File.Open(indexFile, FileMode.Open);
using (BinaryReader binReader = new BinaryReader(streamIn))
@@ -142,7 +114,7 @@ namespace CsvView.Code
public void LoadIndexOfFile(string file)
{
DateTime dtFile = File.GetCreationTime(file);
string indexFile = file + ".idx";
string indexFile = $"{file}.idx";
if (File.Exists(indexFile) && File.GetCreationTime(indexFile) > dtFile)
{
_index = Index_LoadFile(indexFile);

View File

@@ -0,0 +1,37 @@
using System;
using System.IO;
namespace CsvView.Code
{
public class TrackingTextReader : TextReader
{
private readonly TextReader _baseReader;
private int _position;
public TrackingTextReader(TextReader baseReader)
{
_baseReader = baseReader;
}
public override int Read()
{
_position++;
return _baseReader.Read();
}
public override int Read(char[] buffer, int index, int count)
{
throw new NotImplementedException("Read buffered method on TrackingTextReader");
}
public override int Peek()
{
return _baseReader.Peek();
}
public int Position
{
get { return _position; }
}
}
}

View File

@@ -66,6 +66,7 @@
<ItemGroup>
<Compile Include="Code\CsvIndexer.cs" />
<Compile Include="Code\CsvParser.cs" />
<Compile Include="Code\TrackingTextReader.cs" />
<Compile Include="UI\CTextBox.cs">
<SubType>Component</SubType>
</Compile>

View File

@@ -51,7 +51,7 @@ namespace CsvView.UI
_loadedFile = fileName;
txtPath.Text = fileName;
var csvIndexer = new CsvIndexer();
CsvIndexer csvIndexer = new CsvIndexer();
csvIndexer.LoadIndexOfFile(_loadedFile);
_index = csvIndexer.Index;
_totalRegs = _index.Count - 1;
@@ -108,16 +108,16 @@ namespace CsvView.UI
List<string> currentData = Index_LoadReg((int)currentReg);
int y = 0;
const int TexboxPadding = 5;
const int PaddingLeft = 0;
const int PaddingRight = 0;
const int PaddingBetween = 10;
const int LineHeight = 15;
const int textBoxPadding = 5;
const int paddingLeft = 0;
const int paddingRight = 0;
const int paddingBetween = 10;
const int lineHeight = 15;
for (int i = 0; i < currentData.Count; i++)
{
TextBox txtValue = RenderValue(currentData[i], y, TexboxPadding, PaddingLeft, PaddingRight, LineHeight);
TextBox txtValue = RenderValue(currentData[i], y, textBoxPadding, paddingLeft, paddingRight, lineHeight);
pnlData.Controls.Add(txtValue);
y += txtValue.Height + PaddingBetween;
y += txtValue.Height + paddingBetween;
}
pnlData.Height = y;
@@ -125,17 +125,17 @@ namespace CsvView.UI
_rendering = false;
}
private TextBox RenderValue(string value, int y, int TexboxPadding, int PaddingLeft, int PaddingRight, int LineHeight)
private TextBox RenderValue(string value, int y, int textBoxPadding, int paddingLeft, int paddingRight, int lineHeight)
{
string[] valueLines = value.Split('\n');
CTextBox txtValue = new CTextBox()
{
Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right),
Width = pnlData.Width - (PaddingLeft + PaddingRight),
Height = (valueLines.Length * LineHeight) + TexboxPadding,
Width = pnlData.Width - (paddingLeft + paddingRight),
Height = (valueLines.Length * lineHeight) + textBoxPadding,
Multiline = (valueLines.Length > 1),
Top = y,
Left = PaddingLeft,
Left = paddingLeft,
ReadOnly = true,
};
for (int j = 0; j < valueLines.Length; j++)