public async IAsyncEnumerable <LogEntry> ReadAsync(string fullFilePath) { StringBuilder sb = new StringBuilder(); LogEntry logEntry = new LogEntry(); await foreach (var line in _fileReader.ReadLinesAsync(fullFilePath)) { _lineParser.ParseLine(line); if (_lineParser.HasTimeStamp) { if (logEntry.TimeStamp > DateTime.MinValue) { logEntry.CallStack = sb.ToString(); sb = new StringBuilder(); yield return(logEntry); } logEntry = new LogEntry(); logEntry.TimeStamp = _lineParser.TimeStamp.AddMilliseconds(int.Parse(_lineParser.TimeStampMilliseconds)); logEntry.LogLevel = _lineParser.LogLevel; logEntry.Message = _lineParser.Message; } else { sb.AppendLine(line); } } }
/// <summary> /// Read file to get the data for parsing /// </summary> /// <returns>List of LineModel as Task</returns> public virtual async Task <List <LineModel> > ReadFile() { bool isFirstLine = true; List <LineModel> timeData = new List <LineModel>(); using (FileStream fs = File.Open(fileToParse, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (BufferedStream bs = new BufferedStream(fs)) { using (StreamReader sr = new StreamReader(bs)) { string line; while ((line = await sr.ReadLineAsync()) != null) { if (isFirstLine) { isFirstLine = false; continue; } if (!string.IsNullOrWhiteSpace(line)) { var time = _lineParser.ParseLine(line); timeData.Add(time); } } } } } return(timeData); }
private static void ViaRawStream2(ILineParser lineParser) { var sb = new StringBuilder(); using (var reader = File.OpenRead(@"..\..\example-input.csv")) { try { bool endOfFile = false; while (reader.CanRead) { sb.Clear(); while (endOfFile == false) { var readByte = reader.ReadByte(); if (readByte == -1) { endOfFile = true; break; } var character = (char)readByte; if (character == '\r') { continue; } if (character == '\n') { break; } sb.Append(character); } if (endOfFile) { break; } lineParser.ParseLine(sb); } } catch (Exception exception) { throw new Exception("File could not be parsed", exception); } } }
private static void ViaFileStreamWithStringBuilderWithCustomBufferSize(ILineParser lineParser, int bufferSize) { var sb = new StringBuilder(); using (var reader = new FileStream(@"..\..\example-input.csv", FileMode.Open, FileAccess.Read, FileShare.None, bufferSize)) { try { bool endOfFile = false; while (reader.CanRead) { sb.Clear(); while (endOfFile == false) { var readByte = reader.ReadByte(); if (readByte == -1) { endOfFile = true; break; } var character = (char)readByte; if (character == '\r') { continue; } if (character == '\n') { break; } sb.Append(character); } if (endOfFile) { break; } lineParser.ParseLine(sb); } } catch (Exception exception) { throw new Exception("File could not be parsed", exception); } } }
private static void ViaStreamReader(ILineParser lineParser) { using (StreamReader reader = File.OpenText(@"..\..\example-input.csv")) { try { while (reader.EndOfStream == false) { lineParser.ParseLine(reader.ReadLine()); } } catch (Exception exception) { throw new Exception("File could not be parsed", exception); } } }
public async Task <ValidationResult> Validate(string filePath) { List <ObjectData> objects = new List <ObjectData>(); using (FileStream stream = File.OpenRead(filePath)) using (StreamReader reader = new StreamReader(stream)) { while (!reader.EndOfStream) { string line = await reader.ReadLineAsync(); ObjectData pdfObject = mLineParser.ParseLine(line); if (pdfObject != null) { objects.Add(pdfObject); } } } // TODO Get Xref table and validate. return(new ValidationResult(false, "bla bla")); }
private static void ViaRawStream(ILineParser lineParser) { var sb = new StringBuilder(); var charPool = ArrayPool <char> .Shared; using (var reader = File.OpenRead(@"..\..\example-input.csv")) { try { bool endOfFile = false; while (reader.CanRead) { sb.Clear(); while (endOfFile == false) { var readByte = reader.ReadByte(); if (readByte == -1) { endOfFile = true; break; } var character = (char)readByte; if (character == '\r') { continue; } if (character == '\n') { break; } sb.Append(character); } if (endOfFile) { break; } char[] rentedCharBuffer = charPool.Rent(sb.Length); try { for (int index = 0; index < sb.Length; index++) { rentedCharBuffer[index] = sb[index]; } lineParser.ParseLine(rentedCharBuffer); } finally { charPool.Return(rentedCharBuffer, true); } } } catch (Exception exception) { throw new Exception("File could not be parsed", exception); } } }