Exemple #1
0
        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));
                    });
                }
            }
        }
Exemple #2
0
        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;
            }
        }