Advertisement
thebys

Pokračující práce na analyzační třídě EPOSu

Jun 7th, 2011
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.67 KB | None | 0 0
  1. using System.IO; //file operations
  2. using HtmlAgilityPack; //header variable consideration
  3. using System.Windows.Forms; //operace s richtextboxem
  4. using System.Collections;
  5. using System;
  6. using System.ComponentModel;
  7. using System.Threading; //operace s arraylistem
  8.  
  9. namespace EPOS_LS
  10. {
  11.     class fahrs
  12.     {
  13.         //načte složku pro zpracování a rozhodne co s jednotlivými soubory
  14.         public static void recognize(string dirpath, form1 form)
  15.         {
  16.             DirectoryInfo dir = new DirectoryInfo(dirpath);
  17.             FileInfo[] fi = dir.GetFiles("*.html");
  18.             foreach (FileInfo file in fi)
  19.             {
  20.                 //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
  21.                 HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
  22.                 dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
  23.                 if (dokument.DocumentNode != null)
  24.                 {
  25.                     HtmlNode h2 = dokument.DocumentNode.SelectSingleNode("//h2");
  26.                     if (h2 != null) //tahle podmínka zařizuje rozřazení podle obsahu H2
  27.                     {
  28.                         if (h2.InnerText.ToString().Contains("Číselník obcí a okrsků") == true) //Je tam nějaká divná mezera, proto contains a nestačí ==
  29.                         {
  30.                             //baselist.Tfilllevel3(file.FullName, form); //určeno pro číselníky 3. úrovně
  31.                             //zakomentováno - tato úroveň číselníku je v databázi a není potřeba ji přidávat
  32.                         }
  33.                         if (h2.InnerText.ToString().Contains("") == true) //-//-
  34.                         {
  35.  
  36.                         }
  37.                     }
  38.                 }
  39.                 else
  40.                 {
  41.                     //H2 error...
  42.                     logsys.WriteLogEntry(file.Name + "neobsahuje H2 (!!!)", form);
  43.                 }
  44.             }
  45.  
  46.         }
  47.         //snalyzuje soubory ve složce na hlavním vlákně
  48.      
  49.         public static void AnalyzeFolder(string dirpath, string xpath, form1 form, RichTextBox richTextBox)
  50.         {
  51.             //vygenerování polí pro výsledek a počet výsledků
  52.             ArrayList vysledky = new ArrayList();
  53.             ArrayList pocty = new ArrayList();
  54.             pocty.Add(0);
  55.             vysledky.Add("Dokument neobsahuje nic podle zadaných kritérií (XPATH)");
  56.             DirectoryInfo dir = new DirectoryInfo(dirpath);
  57.             FileInfo[] fi = dir.GetFiles("*.html");
  58.             foreach (FileInfo file in fi)
  59.             {
  60.                 //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
  61.                 HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
  62.                 dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
  63.                 if (dokument.DocumentNode != null)
  64.                 {
  65.                     HtmlNode node = dokument.DocumentNode.SelectSingleNode(xpath);
  66.                     try
  67.                     {
  68.                         string vysledek = node.InnerHtml.ToString();
  69.                         int i = 0;
  70.                         bool nalezeno = false;
  71.                         foreach (string zaznam in vysledky)
  72.                         {
  73.                             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
  74.                             else
  75.                             {
  76.                                 i++;
  77.                             }
  78.                         }
  79.                         if (!nalezeno)
  80.                         {
  81.                             vysledky.Add(vysledek); //přidá nový výsledek do pole
  82.                             pocty.Add(1);
  83.                         }
  84.                         else if (nalezeno) { pocty[i] = 1 + Convert.ToInt32(pocty[i].ToString()); i++; } //inkrementuje počet nalezených výsledků
  85.  
  86.                         //else
  87.                         //{
  88.                         //    pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString());
  89.                         //}
  90.                     }
  91.  
  92.  
  93.                     catch (NullReferenceException)
  94.                     {
  95.                         pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není H2
  96.                     }
  97.  
  98.                 }
  99.                 for (int z = 0; z < vysledky.Count; z++)
  100.                 {
  101.                     richTextBox.AppendText(vysledky[z] + " -nalezeno: " + pocty[z] + "*\r\n");
  102.                 }
  103.  
  104.  
  105.             }
  106.         }
  107.        
  108.         //analyzuje soubory ve složce na pracovním vlákně (nesekne aplikaci)
  109.         //vypíše kritéria xpath a jejich počet rychlost 30-40 fps
  110.         static BackgroundWorker bw = new BackgroundWorker();
  111.         public static void AnalyzeFolderBackground(object data)
  112.         {
  113.             analyzepattern workdata = data as analyzepattern;
  114.             bw.DoWork += new DoWorkEventHandler(bw_DoWork);
  115.             bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
  116.             bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
  117.             bw.WorkerReportsProgress = true;
  118.             bw.WorkerSupportsCancellation = true;
  119.             bw.RunWorkerAsync(data);
  120.         }
  121.         static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
  122.         {
  123.             var form = Form.ActiveForm as form1;
  124.             if (form != null)
  125.             {
  126.                 form.progress = e.ProgressPercentage;
  127.             }
  128.            
  129.         }
  130.         static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  131.         {
  132.            
  133.             if (e.Cancelled)
  134.             { return; }
  135.  
  136.             if (e.Error != null) { return; }
  137.             else
  138.             {
  139.                 workdata outputdata = e.Result as workdata;
  140.                 var form = Form.ActiveForm as form1;
  141.                 if (form != null)
  142.                 {
  143.                     for (int z = 0; z < outputdata.vysledky.Count; z++)
  144.                     {
  145.                         form.casanalyzy.Enabled = false;
  146.                         form.richTextBox1.AppendText(outputdata.vysledky[z] + " -nalezeno: " + outputdata.pocty[z] + "*\r\n");
  147.                     }
  148.                 }
  149.             }
  150.         }
  151.         static void bw_DoWork(object sender, DoWorkEventArgs e)
  152.         {
  153.             //přimeme argumenty
  154.             analyzepattern inputdata = e.Argument as analyzepattern;
  155.             ArrayList pocty = new ArrayList();
  156.             ArrayList vysledky = new ArrayList();
  157.             //a tady je práce...
  158.             //vygenerování polí pro výsledek a počet výsledků
  159.             pocty.Add(0);
  160.             vysledky.Add("Dokument neobsahuje nic podle zadaných kritérií (XPATH)");
  161.             DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
  162.             FileInfo[] fi = dir.GetFiles("*.html");
  163.             Int32 p = 0;
  164.             foreach (FileInfo file in fi)
  165.             {
  166.                 //ověříme jestli nemáme přestat
  167.                 if (bw.CancellationPending)
  168.                 {
  169.                     e.Cancel = true;
  170.                     return; //proč je tu tohle?
  171.                 }
  172.                 //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
  173.                 HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
  174.                 dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
  175.                 if (dokument.DocumentNode != null)
  176.                 {
  177.                     HtmlNode node = dokument.DocumentNode.SelectSingleNode(inputdata.xpath);
  178.                     try
  179.                     {
  180.                         string vysledek = node.InnerHtml.ToString();
  181.                         int i = 0;
  182.                         bool nalezeno = false;
  183.                         foreach (string zaznam in vysledky)
  184.                         {
  185.                             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
  186.                             else
  187.                             {
  188.                                 i++;
  189.                             }
  190.                         }
  191.                         if (!nalezeno)
  192.                         {
  193.                             vysledky.Add(vysledek); //přidá nový výsledek do pole
  194.                             pocty.Add(1);
  195.                         }
  196.                         else if (nalezeno) { pocty[i] = 1 + Convert.ToInt32(pocty[i].ToString()); i++; p++; } //inkrementuje počet nalezených výsledků
  197.  
  198.                         else
  199.                         {
  200.                             pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString());
  201.                             p++;
  202.                         }
  203.                     }
  204.  
  205.  
  206.                     catch (NullReferenceException)
  207.                     {
  208.                         pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není H2
  209.                     }
  210.                 }
  211.                 else
  212.                 {
  213.                     pocty[0] = 1 + Convert.ToInt32(pocty[0].ToString()); //pokud není dokument?
  214.                 }
  215.  
  216.  
  217.                 bw.ReportProgress(p);  
  218.             }
  219.             //odešleme výsledek metodě runworkercompleted
  220.             workdata outputdata = new workdata();
  221.             outputdata.vysledky = vysledky;
  222.             outputdata.pocty = pocty;
  223.             e.Result = outputdata;
  224.         }
  225.         public static void cancelbw()
  226.         {
  227.             if (bw.WorkerSupportsCancellation)
  228.             {
  229.                 bw.CancelAsync();  
  230.             }
  231.         }
  232.  
  233.  
  234.         //
  235.         //analýza jednotlivých volebních ročníků
  236.         //
  237.         //
  238.         //2002
  239.         //
  240.         static BackgroundWorker bw2002 = new BackgroundWorker();
  241.         public static void Analyze2002(object data)
  242.         {
  243.             bw2002.DoWork += new DoWorkEventHandler(bw2002_DoWork);
  244.             bw2002.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2002_RunWorkerCompleted);
  245.             bw2002.ProgressChanged += new ProgressChangedEventHandler(bw2002_ProgressChanged);
  246.             bw2002.WorkerReportsProgress = true;
  247.             bw2002.WorkerSupportsCancellation = true;
  248.             bw2002.RunWorkerAsync(data);
  249.         }
  250.  
  251.         static void bw2002_ProgressChanged(object sender, ProgressChangedEventArgs e)
  252.         {
  253.             var form = Form.ActiveForm as form1;
  254.             if (form != null)
  255.             {
  256.                 form.progress = e.ProgressPercentage;
  257.             }
  258.         }
  259.  
  260.         static void bw2002_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  261.         {
  262.             return;
  263.         }
  264.  
  265.         static void bw2002_DoWork(object sender, DoWorkEventArgs e)
  266.         {
  267.             //zpracujeme argumenty
  268.             analyzepattern inputdata = e.Argument as analyzepattern;
  269.             logsys.WriteLogEntry("test logu!", inputdata.form);
  270.             DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
  271.             FileInfo[] fi = dir.GetFiles("*.htm"); //!!!HTML NEBO HTM
  272.             Int32 p = 0; //počet zpracovaných souborů
  273.             foreach (FileInfo file in fi)
  274.             {
  275.                 //ověříme jestli nemáme přestat
  276.                 if (bw2002.CancellationPending)
  277.                 {
  278.                     e.Cancel = true;
  279.                     return; //proč je tu tohle?
  280.                 }
  281.                 //složka načtena, budeme zjišťovat co je obsah podle nadpisu h2
  282.                 HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
  283.                 dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
  284.                 if (dokument.DocumentNode != null)
  285.                 {
  286.                     //ověříme jestli se jedná o stránku SPRÁVNÉHO výsledku
  287.                     HtmlNodeCollection bnodes = dokument.DocumentNode.SelectNodes("//b"); //vytáhne <B>čka (musí být 3)
  288.                     HtmlNode node = dokument.DocumentNode.SelectSingleNode("//font[@size='+0']"); //vytáhne "nadpis"
  289.                     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
  290.                     {//dobře, pokud jsme tady je to dobrá stránka teď potřebujeme ID obce
  291.                         HtmlNode citynamenode = dokument.DocumentNode.SelectSingleNode("//b[3]"); //vytáhne "nadpis" -11 prvních znaků
  292.                         string cityname = citynamenode.InnerText.ToString();
  293.                         cityname = cityname.Remove(0, 11);
  294.                         int cityid = dbo.getcityid(cityname);
  295.                        
  296.                         //zjistíme nevoliče
  297.                         HtmlNode voliciinput = dokument.DocumentNode.SelectSingleNode("//table[1]/tr/td[4]");
  298.                         HtmlNode platnehlasyinput = dokument.DocumentNode.SelectSingleNode("//table[1]/tr/td[8]");
  299.                         string volici = voliciinput.InnerText.ToString();
  300.                         string platnehlasy = platnehlasyinput.InnerText.ToString();
  301.                         volici = volici.Replace(" ", string.Empty);
  302.                         platnehlasy = platnehlasy.Replace(" ", string.Empty);
  303.                         int pocetnevolicu = ((Convert.ToInt32(volici)) - (Convert.ToInt32(platnehlasy)));
  304.                         if (cityid != -1)
  305.                         {
  306.                              //dbo.zapisvysledek(2002, cityid, -1, pocetnevolicu); //-1 se interpretuje jako null
  307.                              logsys.WriteLogEntry(pocetnevolicu.ToString(), inputdata.form);
  308.                         }
  309.                     }
  310.                    
  311.                 }
  312.                 else
  313.                 {
  314.                     //není dokument?
  315.                 }
  316.  
  317.  
  318.                 p++; //inkrementuje počet zpracovaných soubrů
  319.                 bw2002.ReportProgress(p);
  320.             }
  321.            
  322.            
  323.            
  324.         }
  325.         public static void cancelbw2002()
  326.         {
  327.             if (bw2002.WorkerSupportsCancellation)
  328.             {
  329.                 bw2002.CancelAsync();  
  330.             }
  331.         }
  332.  
  333.     }
  334. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement