public async Task Read(string path, IProgress <string> progressHandler) { progressHandler.Report("Starting reading *.XLSX file..."); progressHandler.Report("Path: " + path); Entries = new List <LocEntry>(); MetaData = new List <string>(); using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new XSSFWorkbook(stream); ISheet entriesSheet = workbook.GetSheetAt(0); ISheet metaSheet = workbook.GetSheetAt(1); for (int i = 0; i <= metaSheet.LastRowNum; i++) { IRow row = metaSheet.GetRow(i); MetaData.Add(row.GetCell(0).StringCellValue); } // First row is contans titles for colums for (int i = 1; i <= entriesSheet.LastRowNum; i++) { await Task.Run(() => { var entry = new LocEntry(); IRow row = entriesSheet.GetRow(i); entry.msgctxt = row.GetCell(0).StringCellValue; entry.msgid = row.GetCell(1).StringCellValue; entry.msgstr = row.GetCell(2).StringCellValue; entry.translatorComments = GetStringListFromText(row.GetCell(3).StringCellValue); entry.flags = GetStringListFromText(row.GetCell(4).StringCellValue); entry.comments = GetStringListFromText(row.GetCell(5).StringCellValue); entry.references = GetStringListFromText(row.GetCell(6).StringCellValue); Entries.Add(entry); progressHandler.Report(string.Format("Entry {0}/{1}", i, entriesSheet.LastRowNum)); }); } } }
public async Task Read(string path, IProgress <string> progressHandler) { progressHandler.Report("Starting reading *.PO file..."); progressHandler.Report("Path: " + path); try { using (StreamReader stream = new StreamReader(path)) { // Meta data reading MetaData = new List <string>(); while (!stream.EndOfStream) { string line = await stream.ReadLineAsync(); if (line == string.Empty) { break; } MetaData.Add(line); } Entries = new List <LocEntry>(); Entries.Add(new LocEntry()); // Entries reading while (!stream.EndOfStream) { string line = await stream.ReadLineAsync(); if (line == string.Empty) { if (!stream.EndOfStream) { Entries.Add(new LocEntry()); } continue; } await Task.Run(() => { LocEntry currentEntry = Entries[Entries.Count - 1]; string prefix = line.Substring(0, 3); switch (prefix) { case "#. ": currentEntry.comments.Add(line.Substring(3)); break; case "# ": currentEntry.translatorComments.Add(line.Substring(3)); break; case "#, ": currentEntry.flags = currentEntry.flags.Concat(line.Substring(3).Split(',')).ToList(); break; case "#: ": currentEntry.references = currentEntry.references.Concat(line.Substring(3).Split(',')).ToList(); break; case "msg": if (line.IndexOf("msgctxt") == 0) { currentEntry.msgctxt = GetMsgValue(line); } else if (line.IndexOf("msgid") == 0) { currentEntry.msgid = GetMsgValue(line); } else if (line.IndexOf("msgstr") == 0) { currentEntry.msgstr = GetMsgValue(line); } break; } }); } progressHandler.Report("Number of entries: " + Entries.Count); } } catch (Exception e) { throw e; } }