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ů
- //
- //
- //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)
- {
- return;
- }
- static void bw2002_DoWork(object sender, DoWorkEventArgs e)
- {
- //zpracujeme argumenty
- analyzepattern inputdata = e.Argument as analyzepattern;
- logsys.WriteLogEntry("test logu!", inputdata.form);
- DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
- FileInfo[] fi = dir.GetFiles("*.htm"); //!!!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?
- }
- //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)
- {
- //ověříme jestli se jedná o stránku SPRÁVNÉHO výsledku
- HtmlNodeCollection bnodes = dokument.DocumentNode.SelectNodes("//b"); //vytáhne <B>čka (musí být 3)
- HtmlNode node = dokument.DocumentNode.SelectSingleNode("//font[@size='+0']"); //vytáhne "nadpis"
- if (bnodes.Count == 3 & node.InnerText.Contains("Výsledky hlasování za územní celky")) //contains proto, že to innertextu se vcucne i zalamovací znak (ne br, znak) a == nefunguje
- {//dobře, pokud jsme tady je to dobrá stránka teď potřebujeme ID obce
- HtmlNode citynamenode = dokument.DocumentNode.SelectSingleNode("//b[3]"); //vytáhne "nadpis" -11 prvních znaků
- string cityname = citynamenode.InnerText.ToString();
- cityname = cityname.Remove(0, 11);
- int cityid = dbo.getcityid(cityname);
- //zjistíme nevoliče
- HtmlNode voliciinput = dokument.DocumentNode.SelectSingleNode("//table[1]/tr/td[4]");
- HtmlNode platnehlasyinput = dokument.DocumentNode.SelectSingleNode("//table[1]/tr/td[8]");
- string volici = voliciinput.InnerText.ToString();
- string platnehlasy = platnehlasyinput.InnerText.ToString();
- volici = volici.Replace(" ", string.Empty);
- platnehlasy = platnehlasy.Replace(" ", string.Empty);
- int pocetnevolicu = ((Convert.ToInt32(volici)) - (Convert.ToInt32(platnehlasy)));
- if (cityid != -1)
- {
- //dbo.zapisvysledek(2002, cityid, -1, pocetnevolicu); //-1 se interpretuje jako null
- logsys.WriteLogEntry(pocetnevolicu.ToString(), inputdata.form);
- }
- }
- }
- else
- {
- //není dokument?
- }
- p++; //inkrementuje počet zpracovaných soubrů
- bw2002.ReportProgress(p);
- }
- }
- public static void cancelbw2002()
- {
- if (bw2002.WorkerSupportsCancellation)
- {
- bw2002.CancelAsync();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement