Ich erhalte die Fehlermeldung „Format wurde nicht behandelt“ - auf diese:C# - Eine nicht behandelte Ausnahme des Typs System.FormatException - Liste String zur Liste int
List<int> myStringList = LoadHours.ConvertAll(s => Int32.Parse(s));
Ich brauche zusätzlich tun zu können und Division, deshalb versuche ich, sie in eine ganze Zahl zu konvertieren. Ich bin mir nicht sicher, wie ich damit umgehen soll, müsste ich sie wieder in eine Zeichenfolge konvertieren?
Der 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);
Die Hours.txt-Datei enthält diese:
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
Ich versuche nur die Ziffern von Stunden und Minuten zu ändern. Berechnung der verstrichenen Zeit (die Dauer der Programmöffnung) und Hinzufügen zu der bereits in der Textdatei gespeicherten Menge. Dann speichern Sie es zurück in die Datei, anstatt es an die Konsole auszugeben. (I analysieren Sie die Datei und verwenden regex die Ziffern zu packen und ich denke ich, wenn Anweisung Minuten tun müssen,> 60 Umwandlung ähnlich wie diese 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;
}
Überprüfen Sie meine Antwort und sagen Sie mir, ob Ihnen geholfen hat. – mybirthname