public static SplitingLine Find(List <SplitingLine> inputText, SplitingLine inputLine) { SplitingLine outputLine = inputLine; outputLine.Comments = new List <SplitingLine.CommentFrom>(); if (inputLine.Comment == FileLine.DefaultCommentString) { foreach (SplitingLine line in inputText) { if (line.Column == inputLine.Column && line.Table != inputLine.Table && line.Comment != FileLine.DefaultCommentString) { if (!inputLine.Comments.Exists(x => x.Value == line.Comment)) { SplitingLine.CommentFrom comment = new SplitingLine.CommentFrom() { Value = line.Comment, Table = line.Table }; outputLine.Comments.Add(comment); } } } } return(outputLine); }
public static string JoinLine(SplitingLine inputLine, out List <CommentFrom> comments) { comments = new List <CommentFrom>(); if (inputLine.Comments != null) { comments = inputLine.Comments; } string result; if (inputLine.Column == null) { result = inputLine.Base + '.' + inputLine.Table; } else { result = inputLine.Base + '.' + inputLine.Table + '.' + inputLine.Column; } return(result); }
public static List <SplitingLine> ConvertSqlToTxt(List <string> file) { List <string> newText = new List <string>(); List <SplitingLine> newSplitingText = new List <SplitingLine>(); file.RemoveAll(x => Regex.IsMatch(x, "^--") || x == ""); int fileRange = file.Count; for (int i = 0; i < fileRange; i += 2) { string line = file[i].Replace("comment on column ", "").Replace("comment on table ", ""); string comment = file[i + 1].Replace("is '", "").Replace("';", ""); newSplitingText.Add(SplitingLine.SplitLine(line, comment)); } List <SplitingLine> newSplitingTextWithComments = new List <SplitingLine>(); foreach (var line in newSplitingText) { newSplitingTextWithComments.Add(CommentSearch.Find(newSplitingText, line)); } return(newSplitingTextWithComments); }
/// <summary> /// Сформировать строки sql файла из txt с комментариями /// </summary> /// <param name="file">Список строк из файла txt с комментариями</param> /// <returns>Список строк файла sql</returns> public static List <string> ConvertTxtToSql(List <SplitingLine> file) { List <string> newText = new List <string>(); //новый текст List <string> tableList = new List <string>(); //список таблиц tableList.Add("--Список таблиц:"); bool tableSectionEnd = false; FileLine fileLine = new FileLine(); foreach (var splitLine in file) { List <SplitingLine.CommentFrom> comments; tableSectionEnd = splitLine.Column != null; string line = SplitingLine.JoinLine(splitLine, out comments); fileLine.CurrLine = line; switch (line) { case "Таблицы:": string newLine = "-- " + line; newText.Add(newLine); break; case "Колонки:": tableSectionEnd = true; newLine = "-- " + line; newText.Add(newLine); break; case "": newText.Add(line); break; default: if (tableSectionEnd) { string tableName; if (fileLine.IsNew(out tableName)) { tableList.Add("-- " + tableName); newText.Add("-- Таблица " + tableName); } if (splitLine.Comments.Count == 0) { newLine = String.Format("comment on column " + line + "\nis '{0}';", splitLine.Comment); } else { string commentList = ""; if (splitLine.Comments.Count > 1) { commentList += "\n-- Несколько вариантов:"; } foreach (var comment in splitLine.Comments) { commentList += String.Format("\n-- Из таблицы {1} \nis '{0}';", comment.Value, comment.Table); } newLine = "comment on column " + line + commentList; } newText.Add(newLine); } else { newLine = "comment on table " + line + "\nis 'TEXT';"; newText.Add(newLine); } break; } } tableList.Add(""); tableList.AddRange(newText); //string writePath = readPath.Replace(".txt", ".sql"); /* * using (StreamWriter sw = new StreamWriter(writePath, false, Encoding.Default)) * { * foreach (string line in tableList) * sw.WriteLine(line); * sw.WriteLine(""); * foreach (string line in newText) * sw.WriteLine(line); * } * return "Готово"; */ return(tableList); }