using System;
using System.IO;
using System.Data;
using System.Linq;
using System.Collections.Generic;
namespace TXT
{
public class ShineTable
{
public String LoadPath;
public List
Tables;
public ShineTable(String LP) { LoadPath = LP; }
public Boolean IsShineTable()
{
foreach (String Line in File.ReadAllLines(LoadPath))
{
if (Line.ToLower().StartsWith("#table")) { return true; }
}
return false;
}
public void Read()
{
Tables = new List();
StreamReader Reader = new StreamReader(LoadPath);
Table NewTable = new Table();
String CurrentLine;
while ((CurrentLine = Reader.ReadLine()) != null)
{
if (CurrentLine.ToLower().StartsWith("#table"))
{
NewTable = new Table();
NewTable.Source = new DataTable();
NewTable.Source.TableName = CurrentLine.Split(new String[] { "\t" }, StringSplitOptions.None)[1];
Tables.Add(NewTable);
}
else if (CurrentLine.ToLower().StartsWith("#columntype")) { NewTable.ColumnTypeRow = CurrentLine; }
else if (CurrentLine.ToLower().StartsWith("#columnname"))
{
Int32 ID = 0;
String[] ColumnSplit = CurrentLine.Split(new String[] { "\t" }, StringSplitOptions.None);
if (CurrentLine.Contains(";")) { CurrentLine = CurrentLine.Split(';')[0]; }
for (Int32 Counter = 1; Counter < ColumnSplit.Length; Counter++)
{
if ((!ColumnSplit[Counter].Contains(";") || ColumnSplit[Counter] != ";") && ColumnSplit[Counter] != String.Empty)
{
DataColumn NewColumn = new DataColumn();
NewColumn.ColumnName = ColumnSplit[Counter];
NewTable.Source.Columns.Add(NewColumn);
ID++;
}
}
}
else if (CurrentLine.ToLower().StartsWith("#record") || CurrentLine.ToLower().StartsWith("#recordin"))
{
List ItemArray = new List();
if (CurrentLine.Contains(";")) { CurrentLine = CurrentLine.Split(':')[0]; }
String[] RowSplit = CurrentLine.Split(new String[] { "\t" }, StringSplitOptions.None);
for (Int32 Counter = 1; Counter < RowSplit.Length; Counter++)
{
if ((!RowSplit[Counter].Contains(";") || RowSplit[Counter] != ";") && RowSplit[Counter] != String.Empty) { ItemArray.Add(RowSplit[Counter]); }
}
NewTable.Source.Rows.Add(ItemArray.ToArray());
}
else if (CurrentLine.ToLower().StartsWith("#end")) { break; }
}
Reader.Dispose();
}
public void Write(String WritePath)
{
if (File.Exists(WritePath)) { File.Move(WritePath, String.Format("C:\\SHNBackups\\{0}{1}.txt", Path.GetFileNameWithoutExtension(WritePath), DateTime.Now.ToString("dd-MM-yyyy.hh-mm-ss-fff"))); }
StreamWriter Writer = new StreamWriter(File.Open(WritePath, FileMode.Create, FileAccess.Write, FileShare.None));
Headers.WriteHeaders(Writer, Tables[0].Source.TableName);
foreach (Table CurrentTable in Tables)
{
Writer.WriteLine();
Writer.WriteLine("#Table\t{0}", CurrentTable.Source.TableName);
Writer.WriteLine(CurrentTable.ColumnTypeRow);
Writer.Write("#ColumnName\t");
for (Int32 Counter = 0; Counter < CurrentTable.Source.Columns.Count; Counter++)
{
if (Counter == (CurrentTable.Source.Columns.Count - 1)) { Writer.Write(CurrentTable.Source.Columns[Counter]); }
else { Writer.Write("{0}\t", CurrentTable.Source.Columns[Counter].ColumnName); }
}
Writer.WriteLine();
foreach (DataRow CurrentRow in CurrentTable.Source.Rows)
{
Writer.Write("#Record\t");
for (Int32 Counter = 0; Counter < CurrentTable.Source.Columns.Count; Counter++)
{
if (Counter == (CurrentTable.Source.Columns.Count - 1)) { Writer.Write(CurrentRow[Counter]); }
else { Writer.Write("{0}\t", CurrentRow[Counter]); }
}
Writer.WriteLine();
}
}
Writer.WriteLine();
Writer.WriteLine("#End");
Writer.Flush();
Writer.Dispose();
LoadPath = WritePath;
}
}
}