/// <summary> /// Attempts to parse a string slice into a bool. /// </summary> static public bool TryParseBool(StringSlice inSlice, out bool outBool) { inSlice = inSlice.Trim(); if (inSlice.Length == 0) { outBool = false; return(false); } if (inSlice.Equals("true", true)) { outBool = true; return(true); } if (inSlice.Equals("false", true)) { outBool = false; return(true); } outBool = false; return(false); }
/// <summary> /// Attempts to parse a string slice into a float. /// </summary> static public bool TryParseFloat(StringSlice inSlice, out float outFloat) { inSlice = inSlice.Trim(); if (inSlice.Length == 0) { outFloat = 0; return(false); } if (inSlice.Equals("Infinity")) { outFloat = float.PositiveInfinity; return(true); } if (inSlice.Equals("-Infinity")) { outFloat = float.NegativeInfinity; return(true); } if (inSlice.Equals("NaN")) { outFloat = float.NaN; return(true); } int evalMode = EvaluateFloatMode(inSlice); if (evalMode == DoNotRead) { outFloat = 0; return(false); } else if (evalMode == ReadAsInteger) { long l; if (TryParseLongInternal(inSlice, false, out l)) { outFloat = (float)l; return(true); } } else if (evalMode == ReadAsDecimalPlace) { double d; if (TryParseLongDouble(inSlice, out d)) { outFloat = (float)d; return(true); } } return(float.TryParse(inSlice.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture, out outFloat)); }
/// <summary> /// Attempts to parse a string slice into a ulong. /// </summary> static public bool TryParseULong(StringSlice inSlice, out ulong outULong) { inSlice = inSlice.Trim(); if (inSlice.StartsWith("0x")) { return(TryParseHex(inSlice.Substring(2), 16, out outULong)); } if (inSlice.Length == 0 || TooLong(inSlice, MaxDigits64)) { outULong = 0; return(false); } decimal accum = 0; char c; for (int i = 0; i < inSlice.Length; ++i) { c = inSlice[i]; if (c == Negative) { outULong = 0; return(false); } if (c == Positive) { if (i > 0) { outULong = 0; return(false); } continue; } if (!IsDigit(c)) { outULong = 0; return(false); } accum = (accum * 10) + (ulong)(c - '0'); } if (accum > ulong.MaxValue) { outULong = 0; return(false); } outULong = (uint)accum; return(true); }
public StringSlice Process(StringSlice inSlice) { StringSlice slice = inSlice.Trim(); if (slice.Length >= 2 && slice.StartsWith('"') && slice.EndsWith('"')) { slice = slice.Substring(1, slice.Length - 2); } // if this contains escaped CSV sequences, unescape it here if (m_Unescape && (slice.Contains("\\") || slice.Contains("\\\""))) { return(slice.Unescape(Escaper.Instance)); } return(slice); }
/// <summary> /// Attempts to parse a string slice into a byte. /// </summary> static public bool TryParseByte(StringSlice inSlice, out byte outByte) { inSlice = inSlice.Trim(); if (inSlice.StartsWith("0x")) { ulong hex; if (TryParseHex(inSlice.Substring(2), 2, out hex)) { outByte = (byte)hex; return(true); } outByte = 0; return(false); } if (inSlice.Length == 0 || TooLong(inSlice, MaxDigits8)) { outByte = 0; return(false); } int accum = 0; char c; for (int i = 0; i < inSlice.Length; ++i) { c = inSlice[i]; if (c == Negative) { outByte = 0; return(false); } if (c == Positive) { if (i > 0) { outByte = 0; return(false); } continue; } if (!IsDigit(c)) { outByte = 0; return(false); } accum = (accum * 10) + (c - '0'); } if (accum > byte.MaxValue) { outByte = 0; return(false); } outByte = (byte)accum; return(true); }
static private bool TryParseLongInternal(StringSlice inSlice, bool inbCheckHex, out long outLong) { inSlice = inSlice.Trim(); if (inbCheckHex && inSlice.StartsWith("0x")) { ulong hex; if (TryParseHex(inSlice.Substring(2), 16, out hex)) { outLong = (long)hex; return(true); } outLong = 0; return(false); } if (inSlice.Length == 0 || TooLong(inSlice, MaxDigits64)) { outLong = 0; return(false); } decimal accum = 0; char c; int sign = 1; for (int i = 0; i < inSlice.Length; ++i) { c = inSlice[i]; if (c == Negative) { if (i > 0) { outLong = 0; return(false); } sign = -1; continue; } else if (c == Positive) { if (i > 0) { outLong = 0; return(false); } continue; } if (!IsDigit(c)) { outLong = 0; return(false); } accum = (accum * 10) + (c - '0'); } accum *= sign; if (accum > long.MaxValue || accum < long.MinValue) { outLong = 0; return(false); } outLong = (long)accum; return(true); }
/// <summary> /// Attempts to parse a string slice into an int. /// </summary> static public bool TryParseInt(StringSlice inSlice, out int outInt) { inSlice = inSlice.Trim(); if (inSlice.StartsWith("0x")) { ulong hex; if (TryParseHex(inSlice.Substring(2), 8, out hex)) { outInt = (int)hex; return(true); } outInt = 0; return(false); } if (inSlice.Length == 0 || TooLong(inSlice, MaxDigits32)) { outInt = 0; return(false); } long accum = 0; char c; int sign = 1; for (int i = 0; i < inSlice.Length; ++i) { c = inSlice[i]; if (c == Negative) { if (i > 0) { outInt = 0; return(false); } sign = -1; continue; } else if (c == Positive) { if (i > 0) { outInt = 0; return(false); } continue; } if (!IsDigit(c)) { outInt = 0; return(false); } accum = (accum * 10) + (c - '0'); } accum *= sign; if (accum > int.MaxValue || accum < int.MinValue) { outInt = 0; return(false); } outInt = (int)accum; return(true); }