Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.IO;
- namespace Journal
- {
- class Journal
- {
- public List<JournalEntry> Entries;
- private static readonly string EntryLineRegex =
- @"-- Entry: (?<title>.*) \((?<year>\d{4})-(?<month>\d{2})" +
- @"-(?<day>\d{2})\)";
- public static Journal FromFile(string filePath)
- {
- Journal returnValue = new Journal();
- StreamReader fileReader = new StreamReader(filePath);
- // Prepare variables for parsing the journal file.
- bool hitFirstEntry = false;
- DateTime currentEntryDate;
- string currentEntryTitle;
- StringBuilder currentEntryText = new StringBuilder();
- // Prepare a regular expression for the entry lines.
- Regex entryLineRegex = new Regex(EntryLineRegex);
- while (!fileReader.EndOfStream)
- {
- string line = fileReader.ReadLine();
- if (line.StartsWith("--"))
- {
- // Is this the first entry encountered? If so, don't try to
- // process the previous entry.
- if (!hitFirstEntry)
- {
- hitFirstEntry = true;
- }
- else
- {
- // Create a JournalEntry with the current entry, then
- // reset for the next entry.
- returnValue.Entries.Add(
- new JournalEntry(
- currentEntryText.ToString(), currentEntryDate
- )
- );
- currentEntryDate = new DateTime();
- currentEntryText.Clear();
- }
- // Extract the new entry title and date from this line and
- // save them.
- Match entryMatch = entryLineRegex.Match(line);
- GroupCollection matches = entryMatch.Groups;
- currentEntryDate = new DateTime(
- Convert.ToInt16(matches["year"].Value),
- Convert.ToInt16(matches["month"].Value),
- Convert.ToInt16(matches["day"].Value)
- );
- currentEntryTitle = matches["title"].Value;
- }
- else
- {
- currentEntryText.Append(line);
- }
- }
- return returnValue;
- }
- }
- class JournalEntry
- {
- public string Text;
- public DateTime EntryDate;
- public JournalEntry(string text, DateTime entryDate)
- {
- this.Text = text;
- this.EntryDate = entryDate;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement