/** Create the string that can be written to a file to form the csv */ private static string generateCSVText(string messagesFolderPath) { var variableNames = getAllVariables(messagesFolderPath); // all variables accross all messages files var messagesFiles = getMessagesFiles(messagesFolderPath); // all messages files without preceding path List <CSVLine> csvContent = new List <CSVLine>(); var languages = messagesFiles.Select(m => { return(new Lang(m.Split('.').Last())); }).ToList(); // initialize each line of the csv file to ensure columns are correct variableNames.ToList().ForEach(v => { csvContent.Add(new CSVLine(v, languages)); }); messagesFiles.ToList().ForEach(messageFile => { string line; Lang language = new Lang(messageFile.Split('.').Last()); System.IO.StreamReader file = new System.IO.StreamReader(messagesFolderPath + "/" + messageFile); while ((line = file.ReadLine()) != null) { string[] split = line.Split('='); string varName = split.First <String>(); string content = string.Join("", split.Skip(1).ToArray()); // concatenate the tail LangAndValue langAndVal = new LangAndValue(language, content); csvContent.ForEach(c => { if (c.variableName == varName) { c.addContent(langAndVal); } }); } }); var langHeadings = csvContent.First().contentByLang.Keys.ToList().Select(k => { return(k.code); }); string headings = "VARIABLE NAME," + string.Join(",", langHeadings.ToArray()); return(headings + "\n" + string.Join("\n", csvContent.Select(c => { return c.ToString(); }).ToArray())); }
public void addContent(LangAndValue content) { contentByLanguage = contentByLanguage.Select(c => { KeyValuePair <Lang, string> result; if (c.Key == content.language) { result = new KeyValuePair <Lang, string>(content.language, content.content); } else { result = c; } return(result); }).ToDictionary(k => k.Key, k => k.Value); }