208 lines
6.6 KiB
C#
208 lines
6.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using IO = System.IO;
|
|
|
|
|
|
namespace MLMStripper
|
|
{
|
|
class Program
|
|
{
|
|
|
|
static string INSERT_SQL = "INSERT [dbo].[CV3MLM] ([SiteID], [RepFlags], [Build], [TouchedBy], [TouchedWhen], [CreatedBy], [CreatedWhen], [Active], [GUID], [ID], [Name], [Description], [Status], [Logic], [MSrepl_tran_version], [UsageType], [Title], [ArdenVersion], [MLMVersion], [MLMDate], [MSReplrowguid]) VALUES (";
|
|
|
|
// # Readin and Process all Lines
|
|
static string curTitle;
|
|
static List<string> ReadInLines = new List<string>();
|
|
static bool LinesInBuffer { get { return ReadInLines.Count > 0; } }
|
|
|
|
#region Simple Getters
|
|
static string GetTitle(string line)
|
|
{
|
|
string s = line.Substring(INSERT_SQL.Length);
|
|
string[] split = s.Split(',');
|
|
|
|
string title = split[11].Trim().Substring(2); // removing starting 'N and last '
|
|
return title.Substring(0, title.Length - 1);
|
|
}
|
|
|
|
static int GetStatus(string line)
|
|
{
|
|
string s = line.Substring(INSERT_SQL.Length);
|
|
string[] split = s.Split(',');
|
|
|
|
int status = int.Parse(split[13].Trim());
|
|
return status;
|
|
}
|
|
|
|
static int GetActive(string line)
|
|
{
|
|
string s = line.Substring(INSERT_SQL.Length);
|
|
string[] split = s.Split(',');
|
|
|
|
int active = int.Parse(split[7].Trim());
|
|
return active;
|
|
}
|
|
#endregion
|
|
|
|
static int nPosFindIn(string startswithToLower, List<string> contents)
|
|
{
|
|
for (int i = contents.Count - 1; i >= 0; i--)
|
|
{
|
|
string s = contents[i].Trim();
|
|
if (s.ToLower().StartsWith(startswithToLower.ToLower()))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
static void CleanupEndOfFile(List<string> contents)
|
|
{
|
|
bool bAddEnd = false;
|
|
|
|
int nPos = nPosFindIn("end:", contents);
|
|
if (nPos == -1)
|
|
{
|
|
nPos = nPosFindIn("urgency:", contents);
|
|
bAddEnd = true;
|
|
}
|
|
|
|
if (nPos == -1)
|
|
{
|
|
for (int i = contents.Count - 1; i >= 0; i--)
|
|
{
|
|
string s = contents[i].Trim();
|
|
if (string.IsNullOrEmpty(s))
|
|
{
|
|
contents.RemoveAt(i);
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
contents.RemoveRange(nPos + 1, (contents.Count - nPos - 1));
|
|
}
|
|
|
|
if (bAddEnd)
|
|
contents.Add("end:");
|
|
}
|
|
|
|
static string CleanLineByLine(string Line)
|
|
{
|
|
return Line.Replace("{{{SINGLE-QUOTE}}}","'");
|
|
}
|
|
|
|
static void WriteOutFile()
|
|
{
|
|
|
|
// write out contents - remove last line and cleanup end
|
|
ReadInLines.RemoveAt(ReadInLines.Count - 1);
|
|
|
|
CleanupEndOfFile(ReadInLines);
|
|
|
|
// Now do the actual work
|
|
string dirpath = IO.Directory.GetCurrentDirectory() + "\\" + curTitle.Split('_')[0];
|
|
if (!IO.Directory.Exists(dirpath))
|
|
IO.Directory.CreateDirectory(dirpath);
|
|
|
|
string FileNameNPath = dirpath + "\\" + curTitle + ".mlm";
|
|
if(IO.File.Exists(FileNameNPath))
|
|
{
|
|
int i = 44;
|
|
}
|
|
using (IO.FileStream fs = new IO.FileStream(FileNameNPath, IO.FileMode.Create))
|
|
using (IO.StreamWriter sw = new IO.StreamWriter(fs, Encoding.UTF8))
|
|
{
|
|
foreach (string line in ReadInLines)
|
|
sw.WriteLine(CleanLineByLine(line));
|
|
sw.Flush();
|
|
}
|
|
|
|
// done
|
|
ReadInLines.Clear();
|
|
curTitle = String.Empty;
|
|
}
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
if (args == null || string.IsNullOrEmpty(args[0]))
|
|
{
|
|
Console.WriteLine("Provide Filename");
|
|
return;
|
|
}
|
|
|
|
string Filename = args[0];
|
|
if (!IO.File.Exists(Filename))
|
|
{
|
|
Console.WriteLine("File does not exist");
|
|
return;
|
|
}
|
|
|
|
// # Readin and Process all Lines
|
|
using (IO.FileStream fs = new IO.FileStream(Filename, IO.FileMode.Open))
|
|
using (IO.StreamReader reader = new IO.StreamReader(fs, Encoding.UTF8))
|
|
{
|
|
// Ignore the first two lines
|
|
reader.ReadLine();
|
|
reader.ReadLine();
|
|
|
|
int filecount = 0;
|
|
// # Iterate thru all the rest of the lines in the File
|
|
for (string Line = reader.ReadLine(); Line != null; Line = reader.ReadLine())
|
|
{
|
|
|
|
if (Line.StartsWith(INSERT_SQL))
|
|
{
|
|
|
|
if (LinesInBuffer)
|
|
{
|
|
WriteOutFile();
|
|
}
|
|
|
|
// we need active and status of 4
|
|
int active = GetActive(Line);
|
|
int status = GetStatus(Line);
|
|
//Trace.WriteLine(String.Format("Active:{0} - Status:{1} - FileCount:{2}", active, status, ++filecount));
|
|
if (active != 1 || status != 4)
|
|
continue;
|
|
|
|
// Begin Parsing this file
|
|
curTitle = GetTitle(Line);
|
|
//if (curTitle == "SCH_OUTPATIENT_STATUS_BOARD_COLUMN_UPDATE_2")
|
|
//{
|
|
// int i = 44;
|
|
//}
|
|
Trace.WriteLine(String.Format("{0} - FileCount:{1}", curTitle, ++filecount));
|
|
|
|
// clear buffer
|
|
ReadInLines.Clear();
|
|
ReadInLines.Add("maintenance:\n"); // begining new file
|
|
continue;
|
|
}
|
|
else if (!String.IsNullOrEmpty(curTitle))
|
|
{
|
|
ReadInLines.Add(Line);
|
|
}
|
|
|
|
}
|
|
|
|
if (LinesInBuffer)
|
|
{
|
|
WriteOutFile();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|