public void writerow(CodeContext /*!*/ context, object sequence) { IEnumerator e = null; if (!PythonOps.TryGetEnumerator(context, sequence, out e)) { throw MakeError("sequence expected"); } int rowlen = PythonOps.Length(sequence); // join all fields in internal buffer JoinReset(); while (e.MoveNext()) { object field = e.Current; bool quoted = false; switch (_dialect.quoting) { case QUOTE_NONNUMERIC: quoted = !(PythonOps.CheckingConvertToFloat(field) || PythonOps.CheckingConvertToInt(field) || PythonOps.CheckingConvertToLong(field)); break; case QUOTE_ALL: quoted = true; break; } if (field is string) { JoinAppend((string)field, quoted, rowlen == 1); } else if (field is double) { JoinAppend(DoubleOps.__repr__(context, (double)field), quoted, rowlen == 1); } else if (field is float) { JoinAppend(SingleOps.__repr__(context, (float)field), quoted, rowlen == 1); } else if (field == null) { JoinAppend(string.Empty, quoted, rowlen == 1); } else { JoinAppend(PythonOps.ToString(context, field), quoted, rowlen == 1); } } _rec.Add(_dialect.lineterminator); PythonOps.CallWithContext( context, _writeline, string.Join("", _rec.ToArray())); }
public void writerow(CodeContext /*!*/ context, object sequence) { IEnumerator e; if (!PythonOps.TryGetEnumerator(context, sequence, out e)) { throw MakeError($"iterable expected, not {PythonTypeOps.GetName(sequence)}"); } // join all fields in internal buffer JoinReset(); while (e.MoveNext()) { object field = e.Current; var quoted = _dialect.quoting switch { QUOTE_NONNUMERIC => !(PythonOps.CheckingConvertToFloat(field) || PythonOps.CheckingConvertToInt(field) || PythonOps.CheckingConvertToLong(field)), QUOTE_ALL => true, _ => false, }; if (field is string) { JoinAppend((string)field, quoted); } else if (field is double) { JoinAppend(DoubleOps.__repr__(context, (double)field), quoted); } else if (field is float) { JoinAppend(SingleOps.__repr__(context, (float)field), quoted); } else if (field is null) { JoinAppend(string.Empty, quoted); } else { JoinAppend(PythonOps.ToString(context, field), quoted); } } if (_num_fields > 0 && _rec.Length == 0) { if (_dialect.quoting == QUOTE_NONE) { throw MakeError("single empty field record must be quoted"); } _num_fields--; JoinAppend(string.Empty, quoted: true); } _rec.Append(_dialect.lineterminator); PythonOps.CallWithContext(context, _writeline, _rec.ToString()); }