public static String ScanDecimalString(this TextReader reader, NumericSignMode mode, CultureInfo culture) { CultureInfo usedCulture = culture == null ? CultureInfo.CurrentCulture : culture; String numeric = reader.ScanNumericString(mode); if (numeric == null) { return(null); } if (!reader.Skip(usedCulture.NumberFormat.NumberDecimalSeparator)) { return(numeric); } String decimals = reader.ScanNumericString(NumericSignMode.AllowNone); if (decimals == null) { return(null); } StringBuilder builder = new StringBuilder().Append(numeric).Append(usedCulture.NumberFormat.NumberDecimalSeparator).Append(decimals); if (reader.Skip('e')) { String shifterNumeric = reader.ScanNumericString(NumericSignMode.RequireOne); if (shifterNumeric != null) { builder.Append('e').Append(shifterNumeric); } } return(builder.ToString()); }
public static String ScanDecimalString(this TextReader reader, NumericSignMode mode) { return(ScanDecimalString(reader, mode, null)); }
public static String ScanNumericString(this TextReader reader, NumericSignMode mode) { StringBuilder builder = new StringBuilder(); while (true) { int intCh = reader.Peek(); if (intCh == '-' || intCh == '+') { if (builder.Length > 0) { return(builder.ToString()); } switch (mode) { case NumericSignMode.AllowNone: return(null); default: if (intCh == '-' && (mode == NumericSignMode.AllowPlusOnly || mode == NumericSignMode.RequirePlus)) { return(null); } else if (intCh == '+' && (mode == NumericSignMode.AllowMinusOnly || mode == NumericSignMode.RequireMinus)) { return(null); } break; } } else if (intCh == -1 || (intCh < '0' || intCh > '9')) { if (builder.Length == 0) { return(null); } return(builder.ToString()); } if (builder.Length == 0) { switch (mode) { case NumericSignMode.RequireOne: if (intCh != '-' && intCh != '+') { return(null); } break; case NumericSignMode.RequirePlus: if (intCh != '+') { return(null); } break; case NumericSignMode.RequireMinus: if (intCh != '-') { return(null); } break; } } builder.Append((Char)reader.Read()); } }