public IEnumerable <IRow> Read() { _context.Debug(() => "Reading file stream."); var start = _context.Connection.Start; var end = 0; if (_context.Entity.IsPageRequest()) { start += (_context.Entity.Page * _context.Entity.PageSize) - _context.Entity.PageSize; end = start + _context.Entity.PageSize; } var current = _context.Connection.Start; var engine = FileHelpersEngineFactory.Create(_context); using (engine.BeginReadStream(new StreamReader(_stream))) { foreach (var record in engine) { if (end == 0 || current.Between(start, end)) { var values = engine.LastRecordValues; var row = _rowFactory.Create(); for (var i = 0; i < _context.InputFields.Length; i++) { var field = _context.InputFields[i]; if (field.Type == "string") { row[field] = values[i] as string; } else { row[field] = field.Convert(values[i]); } } yield return(row); } ++current; if (current == end) { break; } } } if (engine.ErrorManager.HasErrors) { foreach (var error in engine.ErrorManager.Errors) { _context.Error(error.ExceptionInfo.Message); } } }
public void Write(IEnumerable <IRow> rows) { var engine = FileHelpersEngineFactory.Create(_context); var file = Path.Combine(_context.Connection.Folder, _fileName ?? _context.Entity.OutputTableName(_context.Process.Name)); _context.Debug(() => $"Writing {file}."); using (engine.BeginWriteFile(file)) { foreach (var row in rows) { for (var i = 0; i < _context.OutputFields.Length; i++) { var field = _context.OutputFields[i]; switch (field.Type) { case "byte[]": engine[i] = Convert.ToBase64String((byte[])row[field]); //engine[i] = Utility.BytesToHexString((byte[]) row[field]); //engine[i] = Encoding.UTF8.GetString((byte[])row[field]); break; case "string": engine[i] = row[field]; break; case "datetime": engine[i] = ((DateTime)row[field]).ToString("o"); break; default: engine[i] = row[field].ToString(); break; } } engine.WriteNextValues(); } if (engine.ErrorManager.HasErrors) { var errorFile = Path.Combine(Path.GetDirectoryName(_fileName) ?? string.Empty, Path.GetFileNameWithoutExtension(_fileName) + ".errors.txt"); _context.Error($"File writer had {engine.ErrorManager.ErrorCount} error{engine.ErrorManager.ErrorCount.Plural()}. See {errorFile}."); engine.ErrorManager.SaveErrors(errorFile); } } }
public void Write(IEnumerable <IRow> rows) { _context.Debug(() => "Writing to stream."); var engine = FileHelpersEngineFactory.Create(_context); var writer = new StreamWriter(_stream); using (engine.BeginWriteStream(writer)) { foreach (var row in rows) { for (var i = 0; i < _context.OutputFields.Length; i++) { var field = _context.OutputFields[i]; switch (field.Type) { case "byte[]": engine[i] = Convert.ToBase64String((byte[])row[field]); break; case "string": engine[i] = row[field]; break; case "datetime": var format = field.Format == string.Empty ? "o" : field.Format.Replace("AM/PM", "tt"); engine[i] = row[field] is DateTime ? ((DateTime)row[field]).ToString(format) : Convert.ToDateTime(row[field]).ToString(format); break; case "float": case "decimal": case "single": case "double": if (field.Format == string.Empty) { engine[i] = row[field].ToString(); } else { switch (field.Type) { case "single": case "float": engine[i] = row[field] is float?((float)row[field]).ToString(field.Format) : Convert.ToSingle(row[field]).ToString(field.Format); break; case "decimal": engine[i] = row[field] is decimal ? ((decimal)row[field]).ToString(field.Format) : Convert.ToDecimal(row[field]).ToString(field.Format); break; case "double": engine[i] = row[field] is double?((double)row[field]).ToString(field.Format) : Convert.ToDouble(row[field]).ToString(field.Format); break; default: engine[i] = row[field].ToString(); break; } } break; default: engine[i] = row[field].ToString(); break; } } engine.WriteNextValues(); } } }