Ahoj mám tyto vstupní data:<2/28/2017 8:10:16 AM>: --- Open a new connection: 10.70.172.66 - 1233 -------<2/28/2017 8:10:16 AM>: COMMAND_GET_ID succesfull<2/28/2017 8:10:16 AM>: ---- Closing previous connection ---<2/28/2017 6:38:16 PM>: --- Open a new connection: 10.70.172.66 - 1233 -------<2/28/2017 6:38:16 PM>: COMMAND_GET_ID failed<2/28/2017 6:38:16 PM>: ---- Closing previous connection ---<2/28/2017 9:38:16 AM>: --- Open a new connection: 10.70.172.68 - 1233 -------<2/28/2017 9:38:16 AM>: COMMAND_GET_ID succesfull<2/28/2017 9:38:16 AM>: ---- Closing previous connection ---<2/28/2017 10:38:16 AM>: --- Open a new connection: 10.70.172.68 - 1233 -------<2/28/2017 10:38:16 AM>: COMMAND_GET_ID failed<2/28/2017 10:38:16 AM>: ---- Closing previous connection ---<2/28/2017 11:38:16 AM>: --- Open a new connection: 10.70.172.67 - 1235 -------<2/28/2017 11:38:16 AM>: COMMAND_GET_ID succesfull<2/28/2017 11:38:16 AM>: ---- Closing previous connection ---<2/28/2017 2:38:16 PM>: --- Open a new connection: 10.70.172.67 - 1235 -------<2/28/2017 2:38:16 PM>: COMMAND_GET_ID failed<2/28/2017 2:38:16 PM>: ---- Closing previous connection ---Následující kód:namespace Projekt_PB{class Program{//nastaveni stavu PushButtonpublic const String OkState = "OK";public const String FailState = "Nefunkcni";public const String UnknownState = "Nenalezen odpovidajici stav";public void State(Dictionary<String, List<String>> arrayState, string actualIP, string dt, string actualState){arrayState.Add(actualIP, new List<String> { dt, actualState }); // arrayState,… ktere obsahuje actualIP a List s (dt, atualState)arrayState[actualIP][0] = dt; // overwrite new value of datetimearrayState[actualIP][1] = actualState; // overwrite new value of actualState}public static String getActualStateValue(string line, string actualIP, Dictionary<String, List<String>> arrayState, string dt) // funkce vyberu hodnoty aktualniho stavu{Program program = new Program();string actualState = ""; // definovani actualStatetry{if (line.Contains("succesfull")) // podminka, kdy line musi obsahovat "succesfull"{program.State(arrayState, actualIP, dt, OkState); //volani funkce, ktera obsahuje arrayState, actualIP, dt, OKstav}else if (line.Contains("failed")) // podminka, kdy line musi obsahovat "failed"{program.State(arrayState, actualIP, dt, FailState); //volani funkce, ktera obsahuje arrayState, actualIP, dt, FailStav}else{program.State(arrayState, actualIP, dt, UnknownState); //volani funkce, ktera obsahuje arrayState, actualIP, dt, UnknownStav}}catch{Console.WriteLine("ip:" + actualIP + " " + dt + " ... " + UnknownState);}return actualState;}public static String getActualIPValue(string line) //funkce vyberu IP a Port{string actualIP = ""; // definovani actualIPtry{int pFrom1 = line.IndexOf(" connection: ") + " connection: ".Length;int pTo1 = line.LastIndexOf(" - ");//string IP = line.Substring(pFrom1, pTo1 - pFrom1);actualIP = String.Format("{0}:", line.Substring(pFrom1, pTo1 - pFrom1)); // vyber IP podle IndexOfint pFrom2 = line.IndexOf(" - ") + " - ".Length;int pTo2 = line.LastIndexOf(" -------");//string Port = line.Substring(pFrom2, pTo2 - pFrom2);actualIP += line.Substring(pFrom2, pTo2 - pFrom2); // pridani Port k IP}catch{Console.WriteLine("Error: problem with parsing line containing Open.");}return actualIP;}static void Main(string[] args){String line;//var directory = new DirectoryInfo(@"C:\Users\jedlickaroman\Desktop"); // info o slozce, kde bude dany *log vybran//var myFile = (from f in directory.GetFiles() // vyber souboru ve slozce//orderby f.LastWriteTime descending // serazeni souboru podle zapisu//select f).First(); // vyber prvniho zapsaneho souborustring PBoutput = @"C:\Users\Jmeno\Desktop\Programy\PushButtons.log"; // cesta pro vystupni soubor//using (StreamReader sr = new StreamReader(myFile.OpenRead())) // cteni souboruusing (StreamReader sr = new StreamReader(@"C:\Users\jmeno\Desktop\20170228_1.log"))using (StreamWriter sw = new StreamWriter(PBoutput)) // zapis do souboru//using (StreamWriter sw = new StreamWriter(myFile.Create())){//string[] arrayIP = new string[] { "dt", "IP", "Port" };//bool[] arrayState = new bool[] { true, false };Dictionary<String, List<String>> arrayState = new Dictionary<String, List<String>>(); // definovani pole arrayState se String a ListString actualIP = ""; // definovani actualIPString actualState = ""; // definovani actualStatewhile ((line = sr.ReadLine()) != null) // cteni v cyklu v souboru line by line az do null{string dateText = line.Substring(1, line.IndexOf('>') - 1); // vyber datatext, od ktereho indexu ma zacit ">"DateTime dt = DateTime.Parse(dateText, System.Globalization.CultureInfo.GetCultureInfo("en-us")); // vyber datumu podle datatext a upraveni datumuif (dt > DateTime.Now.AddHours(-1000)) // podminka, kdy vybrane DateTime je vetsi nez DateTime.Now (parametr v hodinach){if (line.Contains("Open")) // podminka line musi obsahovat "Open"{actualIP = getActualIPValue(line); // pridani Port k IP// Console.WriteLine(actualIP);line = sr.ReadLine(); // cteni dalsi lineactualState = getActualStateValue(line, actualIP, arrayState, dt.ToString()); // vyber aktualniho stavu PB, IP, arrayState, dt// Console.WriteLine(actualState);}// if line doesn't contain "Open" ignore it}else{Console.WriteLine("Found no button to do one hour."); // kdyz nebude splnena podminka DateTime vypise "Found no button to do one hour."}} // konec cteni cykluConsole.WriteLine("zacina vypis");foreach (KeyValuePair<String, List<String>> pk in arrayState){Console.WriteLine(String.Format("ip:{0} {1} ... {2}", pk.Key, pk.Value[0], pk.Value[1]));}Console.WriteLine("konci vypis");Console.ReadKey();}}}}Výsledek:ip:10.70.172.66:1233 28.2.2017 18:38:16 ... Nenalezen odpovidajici stavip:10.70.172.68:1233 28.2.2017 10:38:16 ... Nenalezen odpovidajici stavip:10.70.172.67:1235 28.2.2017 14:38:16 ... Nenalezen odpovidajici stavzacina vypisip:10.70.172.66:1233 28.2.2017 8:10:16 ... OKip:10.70.172.68:1233 28.2.2017 9:38:16 ... OKip:10.70.172.67:1233 28.2.2017 11:38:16 ... OKkonci vypisCo chci:Když se objeví (line), kde bude stejné IP a PORT jako už v uloženém arrayListu, tak zkontroluje stav ("OK" - succesful, "Nefunkcni" - failed či "Nenalezen odpovidajici stav") a porovná datum a čas (dt). Pokud byl stav předtím například OK nechá a pokračuje v další linii. Pokud se stav změnil například z OK na Nefunkcni, tak porovná datum a přepíše array List na novou hodnotu s novým datumem. Správný výstup by měl vypadat takto:zacina vypisip:10.70.172.66:1233 28.2.2017 18:38:16 ... Nefunkcniip:10.70.172.68:1233 28.2.2017 10:38:16 ... Nefunkcniip:10.70.172.67:1235 28.2.2017 14:38:16 ... Nefunkcnikonci vypis Ukázat celý příspěvek