Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.IO; //file operations
- using HtmlAgilityPack; //header variable consideration
- using System.Windows.Forms; //operace s richtextboxem
- using System.Collections;
- using System;
- using System.ComponentModel;
- using System.Threading; //operace s arraylistem
- namespace EPOS_LS
- {
- class fahrs
- {
- //načte složku pro zpracování a rozhodne co s jednotlivými soubory
- public static void recognize(string dirpath, form1 form)
- {
- DirectoryInfo dir = new DirectoryInfo(dirpath);
- FileInfo[] fi = dir.GetFiles("*.html");
- foreach (FileInfo file in fi)
- {
- //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
- HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
- dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
- if (dokument.DocumentNode != null)
- {
- HtmlNode h2 = dokument.DocumentNode.SelectSingleNode("//h2");
- if (h2 != null) //tahle podmínka zařizuje rozřazení podle obsahu H2
- {
- if (h2.InnerText.ToString().Contains("Číselník obcí a okrsků") == true) //Je tam nějaká divná mezera, proto contains a nestačí ==
- {
- //baselist.Tfilllevel3(file.FullName, form); //určeno pro číselníky 3. úrovně
- //zakomentováno - tato úroveň číselníku je v databázi a není potřeba ji přidávat
- }
- if (h2.InnerText.ToString().Contains("") == true) //-//-
- {
- }
- }
- }
- else
- {
- //H2 error...
- logsys.WriteLogEntry(file.Name + "neobsahuje H2 (!!!)", form);
- }
- }
- }
- //snalyzuje soubory ve složce na hlavním vlákně
- public static void AnalyzeFolder(string dirpath, string xpath, form1 form, RichTextBox richTextBox)
- {
- //vygenerování polí pro výsledek a počet výsledků
- ArrayList vysledky = new ArrayList();
- ArrayList pocty = new ArrayList();
- pocty.Add(0);
- vysledky.Add("Dokument neobsahuje nic podle zadaných kritérií (XPATH)");
- DirectoryInfo dir = new DirectoryInfo(dirpath);
- FileInfo[] fi = dir.GetFiles("*.html");
- foreach (FileInfo file in fi)
- {
- //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
- HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
- dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
- if (dokument.DocumentNode != null)
- {
- HtmlNode node = dokument.DocumentNode.SelectSingleNode(xpath);
- try
- {
- string vysledek = node.InnerHtml.ToString();
- int i = 0;
- bool nalezeno = false;
- foreach (string zaznam in vysledky)
- {
- if (zaznam.Contains(vysledek)) { nalezeno = true; break; } //prochází záznamy dokud nenajde shodu - pokud ji najde změní proměnnou nalezeno a přeruší cyklus
- else
- {
- i++;
- }
- }
- if (!nalezeno)
- {
- vysledky.Add(vysledek); //přidá nový výsledek do pole
- pocty.Add(1);
- }
- else if (nalezeno) { pocty[i] = 1 + Convert.ToInt32(pocty[i].ToString()); i++; } //inkrementuje počet nalezených výsledků
- //else
- //{
- // pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString());
- //}
- }
- catch (NullReferenceException)
- {
- pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není H2
- }
- }
- for (int z = 0; z < vysledky.Count; z++)
- {
- richTextBox.AppendText(vysledky[z] + " -nalezeno: " + pocty[z] + "*\r\n");
- }
- }
- }
- //analyzuje soubory ve složce na pracovním vlákně (nesekne aplikaci)
- //vypíše kritéria xpath a jejich počet rychlost 30-40 fps
- static BackgroundWorker bw = new BackgroundWorker();
- public static void AnalyzeFolderBackground(object data)
- {
- analyzepattern workdata = data as analyzepattern;
- bw.DoWork += new DoWorkEventHandler(bw_DoWork);
- bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
- bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
- bw.WorkerReportsProgress = true;
- bw.WorkerSupportsCancellation = true;
- bw.RunWorkerAsync(data);
- }
- static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- var form = Form.ActiveForm as form1;
- if (form != null)
- {
- form.progress = e.ProgressPercentage;
- }
- }
- static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (e.Cancelled)
- { return; }
- if (e.Error != null) { return; }
- else
- {
- workdata outputdata = e.Result as workdata;
- var form = Form.ActiveForm as form1;
- if (form != null)
- {
- for (int z = 0; z < outputdata.vysledky.Count; z++)
- {
- form.casanalyzy.Enabled = false;
- form.richTextBox1.AppendText(outputdata.vysledky[z] + " -nalezeno: " + outputdata.pocty[z] + "*\r\n");
- }
- }
- }
- }
- static void bw_DoWork(object sender, DoWorkEventArgs e)
- {
- //přimeme argumenty
- analyzepattern inputdata = e.Argument as analyzepattern;
- ArrayList pocty = new ArrayList();
- ArrayList vysledky = new ArrayList();
- //a tady je práce...
- //vygenerování polí pro výsledek a počet výsledků
- pocty.Add(0);
- vysledky.Add("Dokument neobsahuje nic podle zadaných kritérií (XPATH)");
- DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
- FileInfo[] fi = dir.GetFiles("*.html");
- Int32 p = 0;
- foreach (FileInfo file in fi)
- {
- //ověříme jestli nemáme přestat
- if (bw.CancellationPending)
- {
- e.Cancel = true;
- return; //proč je tu tohle?
- }
- //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
- HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
- dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
- if (dokument.DocumentNode != null)
- {
- HtmlNode node = dokument.DocumentNode.SelectSingleNode(inputdata.xpath);
- try
- {
- string vysledek = node.InnerHtml.ToString();
- int i = 0;
- bool nalezeno = false;
- foreach (string zaznam in vysledky)
- {
- if (zaznam.Contains(vysledek)) { nalezeno = true; break; } //prochází záznamy dokud nenajde shodu - pokud ji najde změní proměnnou nalezeno a přeruší cyklus
- else
- {
- i++;
- }
- }
- if (!nalezeno)
- {
- vysledky.Add(vysledek); //přidá nový výsledek do pole
- pocty.Add(1);
- }
- else if (nalezeno) { pocty[i] = 1 + Convert.ToInt32(pocty[i].ToString()); i++; p++; } //inkrementuje počet nalezených výsledků
- else
- {
- pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString());
- p++;
- }
- }
- catch (NullReferenceException)
- {
- pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není H2
- }
- }
- else
- {
- pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není dokument?
- }
- bw.ReportProgress(p);
- }
- //odešleme výsledek metodě runworkercompleted
- workdata outputdata = new workdata();
- outputdata.vysledky = vysledky;
- outputdata.pocty = pocty;
- e.Result = outputdata;
- }
- public static void cancelbw()
- {
- if (bw.WorkerSupportsCancellation)
- {
- bw.CancelAsync();
- }
- }
- //
- //analýza jednotlivých volebních ročníků
- //
- //
- //1996 - 2002
- //
- static BackgroundWorker bw2002 = new BackgroundWorker();
- public static void Analyze2002(object data)
- {
- bw2002.DoWork += new DoWorkEventHandler(bw2002_DoWork);
- bw2002.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2002_RunWorkerCompleted);
- bw2002.ProgressChanged += new ProgressChangedEventHandler(bw2002_ProgressChanged);
- bw2002.WorkerReportsProgress = true;
- bw2002.WorkerSupportsCancellation = true;
- bw2002.RunWorkerAsync(data);
- }
- static void bw2002_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- var form = Form.ActiveForm as form1;
- if (form != null)
- {
- form.progress = e.ProgressPercentage;
- }
- }
- static void bw2002_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (e.Cancelled)
- { return; }
- if (e.Error != null) { return; }
- else
- {
- workdata outputdata = e.Result as workdata;
- var form = Form.ActiveForm as form1;
- if (form != null)
- {
- logsys.WriteLogEntry("Pracovní vlákno bw2002 dokončilo práci!", form);
- form.casanalyzy.Enabled = false;
- return;
- }
- }
- }
- static void bw2002_DoWork(object sender, DoWorkEventArgs e)
- {
- //zpracujeme argumenty
- analyzepattern inputdata = e.Argument as analyzepattern;
- logsys.WriteLogEntry("Pracovní vlákno aktivní! BW2002 pracuje...", inputdata.form);
- DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
- FileInfo[] fi = dir.GetFiles("*.html"); //!!!HTML NEBO HTM
- Int32 p = 0; //počet zpracovaných souborů
- foreach (FileInfo file in fi)
- {
- //ověříme jestli nemáme přestat
- if (bw2002.CancellationPending)
- {
- e.Cancel = true;
- return; //proč je tu tohle?
- }
- HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
- dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
- if (dokument.DocumentNode != null)
- {
- //ověření typu dokumentu
- HtmlNode nadpis = dokument.DocumentNode.SelectSingleNode("//font[@size='+0']"); // musí být Výsledky hlasování za územní celky
- HtmlNode citynameinput = dokument.DocumentNode.SelectSingleNode("//b[last()]"); //prvních 6 znaků poslední H3 musí být obec...
- if (nadpis != null & citynameinput != null)
- {
- if (nadpis.InnerText.Contains("Výsledky hlasování za územní celky") & citynameinput.InnerText.Contains("Obec: "))
- {
- //zjistímě jméno a ID obce
- string cityname = citynameinput.InnerText.ToString();
- cityname = cityname.Replace(" ", " ");
- cityname = cityname.Remove(0, 6); //2k10 6 > 7
- //cityname = cityname.Remove(cityname.Length - 1, 1); //2K10
- int cityid = dbo.getcityid(cityname);
- //zjistíme počet nevoličů
- HtmlNode volicivseznamuinput = dokument.DocumentNode.SelectSingleNode("//div[2]/table//tr[3]/td[4]");
- HtmlNode platnehlasyinput = dokument.DocumentNode.SelectSingleNode("//div[2]/table//tr[3]/td[8]");
- if (volicivseznamuinput != null & platnehlasyinput != null)
- {
- string volicivseznamu = volicivseznamuinput.InnerText.ToString();
- string platnehlasy = platnehlasyinput.InnerText.ToString();
- volicivseznamu = volicivseznamu.Replace(" ", string.Empty);
- volicivseznamu = volicivseznamu.Replace(" ", string.Empty);
- platnehlasy = platnehlasy.Replace(" ", string.Empty);
- platnehlasy = platnehlasy.Replace(" ", string.Empty);
- int pocetnevolicu = (Convert.ToInt32(volicivseznamu) - Convert.ToInt32(platnehlasy));
- //zapíšeme počet nevoličů
- if (cityid != -1)
- {
- dbo.zapisvysledek(inputdata.year, cityid, -1, pocetnevolicu); //-1 se interpretuje jako null!
- }
- else
- {
- logsys.WriteLogEntry("Nepodařilo se vytvořit řádek početnevoliču, vynechávám obec!: " + cityid + " : " + cityname + " - " + file.FullName, inputdata.form);
- continue;
- }
- //zjistíme jednotlivé výsledky
- HtmlNodeCollection radkytabulky = dokument.DocumentNode.SelectNodes("//div[2]//table//table//tr");
- foreach (HtmlNode radek in radkytabulky)
- {
- int volebnistrana = -1;
- int pocethlasu = -1;
- HtmlNode stranainput = radek.SelectSingleNode("td[1]");
- if (stranainput != null)
- {
- if (!stranainput.InnerText.ToString().Contains("-") & stranainput.InnerText.ToString() != " ")
- {
- volebnistrana = Convert.ToInt32(stranainput.InnerText.ToString());
- }
- else
- {
- continue;
- }
- }
- else
- {
- continue;
- }
- HtmlNode hlasyinput = radek.SelectSingleNode("td[3]");
- if (hlasyinput != null)
- {
- if (!hlasyinput.InnerText.ToString().Contains("-") & hlasyinput.InnerText.ToString() != " ")
- {
- string pocethlasuinput = hlasyinput.InnerText.ToString();
- pocethlasuinput = pocethlasuinput.Replace(" ", string.Empty);
- pocethlasuinput = pocethlasuinput.Replace(" ", string.Empty);
- pocethlasu = Convert.ToInt32(pocethlasuinput);
- }
- else
- {
- continue;
- }
- }
- else
- {
- continue;
- }
- //zapíšeme výsledek
- if (cityid != -1 & volebnistrana != -1 & pocethlasu != -1)
- {
- dbo.zapisvysledek(inputdata.year, cityid, volebnistrana, pocethlasu);
- }
- }
- }
- else
- {
- p++;
- bw2002.ReportProgress(p);
- continue;
- }
- }
- else
- {
- p++;
- bw2002.ReportProgress(p);
- continue;
- }
- }
- else
- {
- p++;
- bw2002.ReportProgress(p);
- continue;
- }
- }
- p++;
- bw2002.ReportProgress(p);
- }
- }
- public static void cancelbw2002()
- {
- if (bw2002.WorkerSupportsCancellation)
- {
- bw2002.CancelAsync();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement