I'm getting the error "FormatException was unhandled" - on this:
List<int> myStringList = LoadHours.ConvertAll(s => Int32.Parse(s));
I need to be able to do addition and division so that's why I'm trying to convert them into an integer. So I'm not sure how to handle this, would I need to convert them back to string?
The Code:
//string txt = "Account: xxx123xxx\r\nAppID 10: 55 Hours 4 Minutes\r\n\r\nAccount: xxx124xxx\r\nAppID 730: 62 Hours 46 Minutes\r\nAppID 10: 3 Hours 11 Minutes\r\n\r\nAccount: xxx125xxx\r\nAppID 10: 0 Hours 31 Minutes\r\n";
string path = @"Hours.txt";
string text = File.ReadAllText(@"Hours.txt");
Regex pattern = new Regex(@"^((AppID (?<appid>\d+): ((?<hours>\d+) Hours )?((?<minutes>\d+) Minutes)?)|(Account: (?<account>xxx\d+xxx)))", RegexOptions.Multiline);
string[] lines = File.ReadAllLines(path);
int HrElapsed;
int MinElapsed;
Int32.TryParse(HoursElapsed(), out HrElapsed);
Int32.TryParse(MinutesElapsed(), out MinElapsed);
List < string > LoadHours = new List < string > ();
List < string > LoadMinutes = new List < string > ();
// Iterate through lines
foreach(string line in lines) {
//Check if line matches your format here
Match match = pattern.Match(line);
LoadHours.Add(match.Groups["hours"].Value);
LoadMinutes.Add(match.Groups["minutes"].Value);
//File.WriteAllText(@"Hours.txt", Regex.Replace(File.ReadAllText(@"Hours.txt"), @"AppID \d+:\s(\d+\s\w+\s\d+\s\w+)",LogTime));
}
List < int > myStringList = LoadHours.ConvertAll(s => Int32.Parse(s));
List < int > myStringList2 = LoadMinutes.ConvertAll(s => Int32.Parse(s));
for (int i = 0; i < myStringList.Count; ++i)
{
myStringList[i] = myStringList[i] + HrElapsed;
}
for (int i = 0; i < myStringList2.Count; ++i) {
myStringList2[i] = myStringList2[i] + MinElapsed;
}
string[] the_array = myStringList.Select(i => i.ToString()).ToArray();
string[] the_array2 = myStringList2.Select(i => i.ToString()).ToArray();
Regex re = new Regex(@"^((AppID (?<appid>\d+): ((?<hours>\d+) Hours )?((?<minutes>\d+) Minutes)?)|(Account: (?<account>xxx\d+xxx)))", RegexOptions.Multiline);
string hackount = "";
(from m in re.Matches(text).Cast < Match > ()
let acc = m.Groups["account"].Value
let app = m.Groups["appid"].Value
// let hrs = m.Groups["hours"].Value
// let mins = m.Groups["minutes"].Value
let timHours = the_array
let timMinutes = the_array2
let obj = new {
Account = acc == "" ? hackount : (hackount = acc), AppId = app, Time = the_array, the_array2
}
where app != ""
select obj
).ToList().ForEach(Console.WriteLine);
The Hours.txt file includes this:
Account: xxx123xxx
AppID 10: 1 Hours 5 Minutes
Account: xxx124xxx
AppID 10: 2 Hours 6 Minutes
AppID 10: 3 Hours 7 Minutes
Account: xxx125xxx
AppID 10: 4 Hours 8 Minutes
I'm just trying to modify the digits of Hours and Minutes. Calculating the time elapsed (the amount of how long the program has been opened) and adding it to the amount already stored in the text file. Then save it back to the file instead of outputting it to console. (I parse the file and use regex to grab the digits and I think I need to do if statement to minutes >60 conversion similar to this afaik):
int TotalHours = HrElapsed + HrStored;
int TotalMinutes = MinElapsed + MinStored;
// Just making sure the minutes don't end up as "141 minutes" so it's incrementing hours.
if (TotalMinutes >= 60)
{
int remainder = TotalMinutes % 60;
int whole = TotalMinutes / 60;
TotalMinutes = remainder;
TotalHours = TotalHours + whole;
}
It's because you forgot to check if your regex match succeed.
if (match.Success) // You need this check
{
LoadHours.Add(match.Groups["hours"].Value);
LoadMinutes.Add(match.Groups["minutes"].Value);
}
Actually match.Groups["hours"].Value
will just return an empty string when the match failed. And subsequently Int32.Parse(String.Empty)
will throw a FormatException
A simple test :
Regex pattern = new Regex(@"(?<hours>\d+)d");
Match match = pattern.Match("Textwithoutdigits");
var value = match.Groups["hours"].Value;
Console.WriteLine(value == String.Empty); // <-- Will print true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With