using System.Text.RegularExpressions;
public static void Main()
string state = "insert into \"UNKNOWN\".\"OBJ# 383\"(\"COL 1\",\"COL 2\",\"COL 3\",\"COL 4\",\"COL 5\",\"COL 6\",\"COL 7\",\"COL 8\",\"COL 9\",\"COL 10\",\"COL 11\",\"COL 12\",\"COL 13\",\"COL 14\",\"COL 15\",\"COL 16\",\"COL 17\",\"COL 18\",\"COL 19\",\"COL 20\",\"COL 21\",\"COL 22\",\"COL 23\",\"COL 24\",\"COL 25\",\"COL 26\",\"COL 27\",\"COL 28\",\"COL 29\",\"COL 30\",\"COL 31\",\"COL 32\",\"COL 33\",\"COL 34\",\"COL 35\",\"COL 36\",\"COL 37\",\"COL 38\",\"COL 39\",\"COL 40\",\"COL 41\",\"COL 42\") values (HEXTORAW('c40516552a'),HEXTORAW('c103'),HEXTORAW('c102'),NULL,HEXTORAW('53434f5454'),HEXTORAW('4e43532d49545c4445562d4f52412d303034'),HEXTORAW('4445562d4f52412d303034'),HEXTORAW('c20202'),HEXTORAW('80'),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,HEXTORAW('c117'),HEXTORAW('80'),HEXTORAW('c107'),HEXTORAW('80'),HEXTORAW('787808140e103b'),NULL,NULL,HEXTORAW('6d6f68616d6d65642e616d696e'),NULL,NULL,NULL,NULL,HEXTORAW('80'),HEXTORAW('787808140e103b06bc3e40'),NULL,NULL,HEXTORAW('80'),HEXTORAW('323332343a3136373932'),NULL,NULL,NULL,HEXTORAW('c50b284a3c43'),HEXTORAW(''),HEXTORAW(''),NULL);";
var insertCleanUpPattern = "insert\\sinto\\s.*?\\\".*?\\\".\\\".*?\\\"";
state = Regex.Replace(state, insertCleanUpPattern, string.Empty);
var splitStatement = state.Split(" values ");
var colHeaders = splitStatement[0];
var colString = string.Join(
colHeaders.Split("\",\"")
colString = colString.Replace("(\"", "([").Replace("\")", "])");
Console.WriteLine(colString);
var colValues = splitStatement[1];
colValues = colValues.TrimStart('(').TrimEnd(';').TrimEnd(')');
Console.WriteLine(colValues);
var regex=new Regex("\"(?<value>.*?)\"\\s(=|IS)\\s(?<value2>.*?)(,|\\s)");
var colhdrs = string.Join(
regex.Matches(state).Cast<Match>().Select(x => "'" + x.Groups["value"].Value + "'")
var colvals = string.Join(
regex.Matches(state).Cast<Match>().Select(x => {
if(x.Groups["value2"].Value.Equals("NULL", System.StringComparison.OrdinalIgnoreCase))
if(!x.Groups["value2"].Value.Contains("HEXTORAW")){
return x.Groups["value2"].Value;
var val = x.Groups["value2"].Value.Replace("HEXTORAW('", "").Replace("')", "");
byte[] data = FromHex(val.ToString());
return "'" + Encoding.UTF8.GetString(data) + "'";
var output = colhdrs + "###" + colvals;
Console.WriteLine(output);
regex.Matches(state).Cast<Match>().Select(x => x.Groups["value"].Value + " " + x.Groups["value2"].Value)
public static byte[] FromHex(string hex)
hex = hex.Replace("-", "");
byte[] raw = new byte[hex.Length / 2];
for (int i = 0; i < raw.Length; i++)
raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);