From 3a6de12fc02f8aaaf9a55988abb34ca6a322e553 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Thu, 25 Nov 2021 03:11:02 +0200 Subject: [PATCH] feat: complete second half of "Lab4.ChainedWords" --- Lab4.ChainedWords/Knyga.txt | 11 +++---- Lab4.ChainedWords/TaskUtils.cs | 55 +++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/Lab4.ChainedWords/Knyga.txt b/Lab4.ChainedWords/Knyga.txt index e1b448d..09c1b75 100644 --- a/Lab4.ChainedWords/Knyga.txt +++ b/Lab4.ChainedWords/Knyga.txt @@ -1,7 +1,4 @@ -Vienas QRSs!!?SABC V ABC -. -CEF FEG GOF - -QRS SABC - - +Reikia teksto žodžius sulygiuoti, kad kiekvienos eilutės kiekvienas žodis +prasidėtų fiksuotoje toje pačioje pozicijoje. Galima įterpti tik minimalų +būtiną tarpų skaičių. Reikia šalinti iš pradinio teksto kelis iš eilės einančius +vienodus skyriklius, paliekant tik vieną jų atstovą. Įterpimo taisyklę taikome, diff --git a/Lab4.ChainedWords/TaskUtils.cs b/Lab4.ChainedWords/TaskUtils.cs index 806765d..120fa75 100644 --- a/Lab4.ChainedWords/TaskUtils.cs +++ b/Lab4.ChainedWords/TaskUtils.cs @@ -114,8 +114,61 @@ namespace Lab4.ChainedWords } } - public static void ProcessAligned(string input, string ouput, string punctuation) + private static IEnumerable ReadByLines(string filename) { + string line; + using (StreamReader reader = new StreamReader(filename)) + { + while((line = reader.ReadLine()) != null) + { + yield return line; + } + } + } + + public static void ProcessAligned(string inputFile, string outputFile, string punctuation) + { + string pattern = string.Format(@"[^{0}]+[{0}]*", Regex.Escape(punctuation)); + string text = File.ReadAllText(inputFile, Encoding.UTF8); + Dictionary columns = new Dictionary(); + List> words = new List>(); + + foreach (string line in ReadByLines(inputFile)) + { + List row = new List(); + words.Add(row); + int column = 0; + foreach (Match match in Regex.Matches(line, pattern)) + { + string word = match.Value.TrimEnd('\n'); + row.Add(word); + if (!columns.ContainsKey(column)) + { + columns.Add(column, 0); + } + columns[column] = Math.Max(columns[column], word.Length); + column++; + } + } + + using (StreamWriter writer = new StreamWriter(outputFile)) + { + foreach (List row in words) + { + int column = 0; + for (int i = 0; i < row.Count; i++) + { + string word = row[i]; + writer.Write(word); + if (i < row.Count-1) + { + writer.Write(new string(' ', columns[column]-word.Length)); + } + column++; + } + writer.Write("\n"); + } + } } } }