17 using System.Globalization;
19 using System.Runtime.CompilerServices;
32 private const int NoDecimalPlaces = -1;
33 private const char NoMoreData = unchecked((
char)-1);
34 private const char DefaultDelimiter =
',';
42 [MethodImpl(MethodImplOptions.AggressiveInlining)]
43 public static decimal
GetDecimal(
this StreamReader stream,
char delimiter = DefaultDelimiter)
55 [MethodImpl(MethodImplOptions.AggressiveInlining)]
56 public static decimal
GetDecimal(
this StreamReader stream, out
bool pastEndLine,
char delimiter = DefaultDelimiter)
59 var decimalPlaces = NoDecimalPlaces;
60 var current = (char)stream.Read();
62 while (current ==
' ')
64 current = (char)stream.Read();
67 var isNegative = current ==
'-';
70 current = (char)stream.Read();
73 pastEndLine = current ==
'\n' || current ==
'\r' && (stream.Peek() !=
'\n' || stream.Read() ==
'\n') || current == NoMoreData;
74 while (!(current == delimiter || pastEndLine || current ==
' '))
82 value = value * 10 + (current -
'0');
83 if(decimalPlaces != NoDecimalPlaces)
88 current = (char)stream.Read();
89 pastEndLine = current ==
'\n' || current ==
'\r' && (stream.Peek() !=
'\n' || stream.Read() ==
'\n') || current == NoMoreData;
93 var mid = (int)(value >> 32);
94 return new decimal(lo, mid, 0, isNegative, (
byte)(decimalPlaces != NoDecimalPlaces ? decimalPlaces : 0));
104 [MethodImpl(MethodImplOptions.AggressiveInlining)]
107 var current = (char)stream.Read();
108 while (current ==
' ')
110 current = (char)stream.Read();
115 var data =
new char[format.Length];
116 while (!(current == delimiter || current ==
'\n' || current ==
'\r' && (stream.Peek() !=
'\n' || stream.Read() ==
'\n') || current == NoMoreData))
118 data[index++] = current;
119 current = (char)stream.Read();
122 return DateTime.ParseExact(data,
124 CultureInfo.InvariantCulture);
133 [MethodImpl(MethodImplOptions.AggressiveInlining)]
134 public static int GetInt32(
this StreamReader stream,
char delimiter = DefaultDelimiter)
137 var current = (char)stream.Read();
139 while (current ==
' ')
141 current = (char)stream.Read();
144 var isNegative = current ==
'-';
147 current = (char)stream.Read();
150 while (!(current == delimiter || current ==
'\n' || current ==
'\r' && (stream.Peek() !=
'\n' || stream.Read() ==
'\n') || current == NoMoreData || current ==
' '))
152 result = (current -
'0') + result * 10;
153 current = (char)stream.Read();
155 return isNegative ? result * -1 : result;
164 [MethodImpl(MethodImplOptions.AggressiveInlining)]
165 public static string GetString(
this StreamReader stream,
char delimiter = DefaultDelimiter)
167 StringBuilder result =
null;
168 var current = (char)stream.Read();
170 while (!(current == delimiter || current ==
'\n' || current ==
'\r' && (stream.Peek() !=
'\n' || stream.Read() ==
'\n') || current == NoMoreData))
174 result =
new StringBuilder();
176 result.Append(current);
177 current = (char)stream.Read();
180 return result ==
null ?
string.Empty : result.ToString();