protected virtual void AddEntry(DataRow entry) { // Only add entries with an primary key var pkValue = entry[0]; if (pkValue == null || string.IsNullOrEmpty(pkValue.ToString())) { return; } // Clean primary key var pkCleaned = pkValue.ToString().Replace("\r\n", "").Trim(); pkCleaned = Encoding.UTF8.GetString(Encoding.GetBytes(pkCleaned)); pkCleaned = Regex.Replace(pkCleaned, "[^0-9]", ""); var pkey = 0; if (int.TryParse(pkCleaned, out pkey) == false) { Console.WriteLine("Failed to parse primary key in column: " + pkValue); return; } if (RowSearchIndex.ContainsKey(pkey)) { return; } // Add primary key to search index RowSearchIndex.Add(pkey, Entries.Rows.Count); // Encode entries /* * for (var i = 1; i < entry.ItemArray.Length; i++) { * entry[i] = Encoding.UTF8.GetString(Encoding.GetBytes(entry[i].ToString())); * } */ entry[0] = pkey; Entries.Rows.Add(entry); }
public virtual bool ReadTranslation(Encoding translationEncoding) { // Read translation file var translationFilepath = BuildTranslationFilepath(); mTranslationFile = new PipeTrailedFile(translationEncoding, false, false); mTranslationFile.Read(translationFilepath); Entries.BeginInit(); // Apply translations by the first column (always ID?) for (var r = 0; r < mTranslationFile.Entries.Rows.Count; r++) { var translatedRow = mTranslationFile.Entries.Rows[r]; var pkey = int.Parse(translatedRow[0].ToString()); if (RowSearchIndex.ContainsKey(pkey) == false) { continue; } var sourceIndex = RowSearchIndex[pkey]; var sourceRow = Entries.Rows[sourceIndex]; for (var c = 1; c < mTranslationFile.Entries.Columns.Count; c++) { var columnSourceValue = mTranslationFile.ColumnMappings[c]; var columnSourceIndex = int.Parse(columnSourceValue); // Columns start with 0, numbers with 1 columnSourceIndex--; sourceRow[columnSourceIndex] = translatedRow[c]; } } Entries.EndInit(); return(true); }
protected virtual void ReadInternalByChar(int columnCount, bool foundColumnNames) { var currentColIndex = 0; var entry = Entries.NewRow(); var columnValue = string.Empty; while (mLineReader.EndOfStream == false) { var c = (char)mLineReader.Read(); // We got the trailing sign? if (c == '|') { // We have reached the next column number, or we have reached the next entry entry[currentColIndex] = columnValue; // Advance column index currentColIndex++; if (currentColIndex >= columnCount) { // Reached the amount of columns, means new entry // Got column names? if (mHasColumnNames && foundColumnNames == false) { // Third line contains column names, not an entry foundColumnNames = true; for (var i = 0; i < columnCount; i++) { Entries.Columns[i].ColumnName = string.Format("{0} ({1})", entry[i], ColumnMappings[i]); } // Now we have entries } else { // Only add entries with an primary key var pkValue = entry[0]; if (pkValue != null && string.IsNullOrEmpty(pkValue.ToString()) == false) { // Clean primary key var pkCleaned = pkValue.ToString().Replace("\r\n", "").Trim(); pkCleaned = Encoding.UTF8.GetString(Encoding.GetBytes(pkCleaned)); pkCleaned = Regex.Replace(pkCleaned, "[^0-9]", ""); var pkey = 0; if (int.TryParse(pkCleaned, out pkey) == false) { Console.WriteLine("Failed to parse primary key in column: " + pkValue); } else if (RowSearchIndex.ContainsKey(pkey) == false) { // Add primary key to search index RowSearchIndex.Add(pkey, Entries.Rows.Count); // Encode entries /* * for (var i = 1; i < entry.ItemArray.Length; i++) { * entry[i] = Encoding.UTF8.GetString(Encoding.GetBytes(entry[i].ToString())); * } */ entry[0] = pkey; Entries.Rows.Add(entry); } } } entry = Entries.NewRow(); currentColIndex = 0; } // Prepare new column value columnValue = string.Empty; continue; } // No new column or entry, store sign in current column columnValue += c; } }