Advertisement
thebys

analýza na úrovni okresů ak. 2006

Jul 26th, 2011
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 19.79 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.         //1996 - 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.             if (e.Cancelled)
  263.             { return; }
  264.  
  265.             if (e.Error != null) { return; }
  266.             else
  267.             {
  268.  
  269.                 workdata outputdata = e.Result as workdata;
  270.                 var form = Form.ActiveForm as form1;
  271.                 if (form != null)
  272.                 {
  273.                     logsys.WriteLogEntry("Pracovní vlákno bw2002 dokončilo práci!", form);
  274.                     form.casanalyzy.Enabled = false;
  275.                     return;
  276.                 }
  277.             }
  278.         }
  279.  
  280.         static void bw2002_DoWork(object sender, DoWorkEventArgs e)
  281.         {
  282.             //zpracujeme argumenty
  283.             analyzepattern inputdata = e.Argument as analyzepattern;
  284.             logsys.WriteLogEntry("Pracovní vlákno aktivní! BW2002 pracuje...", inputdata.form);
  285.             DirectoryInfo dir = new DirectoryInfo(inputdata.folderpath);
  286.             FileInfo[] fi = dir.GetFiles("*.html"); //!!!HTML NEBO HTM
  287.             Int32 p = 0; //počet zpracovaných souborů
  288.             foreach (FileInfo file in fi)
  289.             {
  290.                 //ověříme jestli nemáme přestat
  291.                 if (bw2002.CancellationPending)
  292.                 {
  293.                     e.Cancel = true;
  294.                     return; //proč je tu tohle?
  295.                     //edit 21.7.2011: nikdo neví...
  296.                 }
  297.  
  298.                 HtmlAgilityPack.HtmlDocument dokument = new HtmlAgilityPack.HtmlDocument();
  299.                 dokument.Load(file.FullName, System.Text.Encoding.GetEncoding(28592)); //načte dokument se správným kódováním (volby.cz compatible)
  300.  
  301.                 if (dokument.DocumentNode != null)
  302.                 {
  303.                     //ověření typu dokumentu
  304.                     HtmlNode nadpis = dokument.DocumentNode.SelectSingleNode("//div[2]/strong/font"); // musí být Výsledky hlasování za územní celky //1996-2006
  305.                     HtmlNode districtnameinput = dokument.DocumentNode.SelectSingleNode("//div[2]/b[last()]"); //1996-2006
  306.  
  307.                     if (nadpis != null & districtnameinput != null)
  308.                     {
  309.  
  310.                         if (nadpis.InnerText.Contains("Výsledky hlasování za územní celky") & districtnameinput.InnerText.Contains("Okres:"))
  311.                         {
  312.  
  313.                             //zjistímě jméno a ID distriktu
  314.                             string districtname = districtnameinput.InnerText.ToString();
  315.                             districtname = districtname.Replace("&nbsp;", " ");
  316.                             districtname = districtname.Replace("n.", "nad ");
  317.                             districtname = districtname.Remove(0, 7); //pro roky 1996-1998: 10, 2002-2006:7, 2010:?
  318.                             //cityname = cityname.Remove(cityname.Length - 1, 1); //2010
  319.                             int districtid = dbo.getdistrictid(districtname);
  320.                             //zjistíme počet nevoličů
  321.                             HtmlNode volicivseznamuinput = dokument.DocumentNode.SelectSingleNode("//div[2]/table//tr[3]/td[4]"); //1996-2006
  322.                             HtmlNode platnehlasyinput = dokument.DocumentNode.SelectSingleNode("//div[2]/table//tr[3]/td[8]"); //1996-2006
  323.                             if (volicivseznamuinput != null & platnehlasyinput != null)
  324.                             {
  325.                                 string volicivseznamu = volicivseznamuinput.InnerText.ToString();
  326.                                 string platnehlasy = platnehlasyinput.InnerText.ToString();
  327.                                 volicivseznamu = volicivseznamu.Replace("&nbsp;", string.Empty);
  328.                                 volicivseznamu = volicivseznamu.Replace(" ", string.Empty);
  329.                                 platnehlasy = platnehlasy.Replace("&nbsp;", string.Empty);
  330.                                 platnehlasy = platnehlasy.Replace(" ", string.Empty);
  331.                                 int pocetnevolicu = (Convert.ToInt32(volicivseznamu) - Convert.ToInt32(platnehlasy));
  332.                                 //zapíšeme počet nevoličů
  333.                                 if (districtid != -1)
  334.                                 {
  335.                                     dbo.zapisvysledek(inputdata.year, districtid, -1, pocetnevolicu); //-1 se interpretuje jako null!
  336.                                 }
  337.                                 else
  338.                                 {
  339.                                     continue;
  340.                                 }
  341.                                 //zjistíme jednotlivé výsledky
  342.                                 HtmlNodeCollection radkytabulky = dokument.DocumentNode.SelectNodes("//div[2]/table[2]//tr/td/table//tr");
  343.                                 //levá polovina tabulky...
  344.                                 foreach (HtmlNode radek in radkytabulky)
  345.                                 {
  346.                                     int volebnistrana = -1;
  347.                                     int pocethlasu = -1;
  348.  
  349.                                     HtmlNode stranainput = radek.SelectSingleNode("td[1]");
  350.  
  351.                                     if (stranainput != null)
  352.                                     {
  353.                                         if (!stranainput.InnerText.ToString().Contains("-") & stranainput.InnerText.ToString() != "&nbsp;" & stranainput != null & stranainput.InnerText.ToString() != " ")
  354.                                         {
  355.                                             logsys.WriteLogEntry(file.FullName.ToString(), inputdata.form);
  356.                                             volebnistrana = Convert.ToInt32(stranainput.InnerText.ToString());
  357.                                         }
  358.                                         else
  359.                                         {
  360.                                             continue;
  361.                                         }
  362.                                     }
  363.                                     else
  364.                                     {
  365.                                         continue;
  366.                                     }
  367.                                     HtmlNode hlasyinput = radek.SelectSingleNode("td[3]");
  368.                                     if (hlasyinput != null)
  369.                                     {
  370.                                         if (!hlasyinput.InnerText.ToString().Contains("-") & hlasyinput.InnerText.ToString() != "&nbsp;")
  371.                                         {
  372.                                             string pocethlasuinput = hlasyinput.InnerText.ToString();
  373.                                             pocethlasuinput = pocethlasuinput.Replace("&nbsp;", string.Empty);
  374.                                             pocethlasuinput = pocethlasuinput.Replace(" ", string.Empty);
  375.                                             pocethlasu = Convert.ToInt32(pocethlasuinput);
  376.                                         }
  377.                                         else
  378.                                         {
  379.                                             continue;
  380.                                         }
  381.                                     }
  382.                                     else
  383.                                     {
  384.                                         continue;
  385.                                     }
  386.                                     //zapíšeme výsledek
  387.                                     if (districtid != -1 & volebnistrana != -1 & pocethlasu != -1)
  388.                                     {
  389.                                         dbo.zapisvysledek(inputdata.year, districtid, volebnistrana, pocethlasu);
  390.                                     }
  391.                                 }
  392.  
  393.                                 //pravá polovina tabulky... (1996-2002):
  394.                                 //skopírujeme výše uvedené zpracování a projedeme je ještě jednou s úpravou selectnode td[6]/a a td[8]
  395.  
  396.                             }
  397.                             else
  398.                             {
  399.                                 p++;
  400.                                 bw2002.ReportProgress(p);
  401.                                 continue;
  402.                             }
  403.                         }
  404.                         else
  405.                         {
  406.                             p++;
  407.                             bw2002.ReportProgress(p);
  408.                             continue;
  409.                         }
  410.                     }
  411.                     else
  412.                     {
  413.                         p++;
  414.                         bw2002.ReportProgress(p);
  415.                         continue;
  416.                     }
  417.                 }
  418.                 p++;
  419.                 bw2002.ReportProgress(p);
  420.             }
  421.  
  422.  
  423.         }
  424.  
  425.  
  426.  
  427.  
  428.         public static void cancelbw2002()
  429.         {
  430.             if (bw2002.WorkerSupportsCancellation)
  431.             {
  432.                 bw2002.CancelAsync();
  433.             }
  434.         }
  435.  
  436.     }
  437. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement