- Bu tarih:C# - Bir işlenmeyen tipi System.FormatException ait istisna - Liste dize Listeye int
List<int> myStringList = LoadHours.ConvertAll(s => Int32.Parse(s));
ben eklenmesini yapabilmek gerekiyor ve Bu yüzden bu yüzden onları bir tamsayıya dönüştürmeye çalışıyorum. Bu yüzden, bunun nasıl halledileceğinden emin değilim, onları tekrar dizeye dönüştürmem gerekecek mi?
Kodu:
//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);
Hours.txt dosyası bu içerir:
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
Sadece Saat ve Dakika hanelerini değiştirmek çalışıyorum. Geçen sürenin hesaplanması (programın ne kadar süre açıldığı) ve metin dosyasında kayıtlı olan miktara eklenir. Ardından konsola göndermek yerine dosyayı tekrar kaydedin. (Ben dosyayı ayrıştırmak ve rakamları kapmak için normal ifadeler kullanabilirsiniz ve ben eğer deyim dakikaya bu afaik benzer> 60 dönüşüm yapmak gerek): Eğer regex maç başarılı olmadığını kontrol etmek unuttum çünkü
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;
}
Cevabımı kontrol edin ve size yardımcı olup olmadığını söyleyin. – mybirthname