UpdateWecker (Anfänger bittet um Hilfe)

Hey,

gut, dass Du schreibst, hab noch ein wenig dran gearbeitet, allerdings sind dabei zwei verschiedene Regex-Patterns rausgekommen, probier mal folgendes aus ...


C#:
            String lineOne = "<td>2,841</td>";
            String lineTwo = "<td><span class=\"drop\">-22</span></td>";
            
            Regex rex1 = new Regex(@"[^<td>$](?<num>[-+]?.+)[^</td>$]");
            Match m1 = rex1.Match(lineOne);
            MessageBox.Show(m1.Groups[0].Value);

            Regex rex2 = new Regex(@"[^<*\"">$](?<num>[-+]?\d)[^</*>$]");
            Match m2 = rex2.Match(lineTwo);
            MessageBox.Show(m2.Groups[0].Value);



Leider weis ich keine Möglichkeit, auf einzelne Zeilen zuzugreifen, ohne die anderen Daten zu lesen.


MfG
 
Zuletzt bearbeitet von einem Moderator:
also der zweite klappt super, für die erste linie hab ich gestern noch noch die methode Trim verwendet, welche auch ganz gut klappt, für die Zweite Zeile hab ich jetzt deinen regex verwendet, welcher auch sehr gut funktioniert bis auf ne kleinigkeit die du aber nicht wissen konntest.

Die Zahl in der zweiten Zeile kann auch einen . mit einer Nachkommastelle und einen nachfolgenden Buchstaben (m oder k) enthalten, diese werden leider durchs jetztige pattern auch noch rausgefiltert, bin zwar schon am rumprobieren, aber iwie blick ich da noch nicht so ganz durch.
 
So ich hab gleich nochmal ein Problem:

Ich habe jetzt aus der anwendung doch eine Windows Form Anwendung gemacht und bis jetzt tut sie auch ziemlich genau das was sie tuen soll.
Ich wollte jetzt noch für die bessere Übersicht eine ProgressBar einbauen die anzeigt wann das nächste mal nach einem Update gesucht wird.

Ich habe ja bereits einen Timer mit (60000), hier wird wenn er abgelaufen ist nach dem update geprüft, gibt es jetzt die möglichkeiten das ich irgendwie die progress bar an diesesn Timer koppeln kann so das z.b. das Maximum der progressbar bei 60 liegt und ProgressBar.PerformStep() jede Sekunde ausgeführt wird? Ich hab schon n bisschen rumprobiert, aber ich komm da irgendwie nicht weiter.
 
Hey,


hab mal so einen Crawler gebastelt, da ist die gewünschte Funktion mit der Progressbar drin,

das Einzige was man abändern müsste, wäre die Eingabe der Zeilen, weil Diese ja eigentlich statisch ist und die Filterung.
Ich habe die Pattern auskommentiert an der Stelle eingefügt, an der die gefundenen Zeilen gefiltert werden.

Das Pattern für den zweiten Wert, der auch anders sein kann, werde ich mir gleich noch angucken.

Auch wenn du das Beispielprog nicht verwendest, kannst es Dir ja mal anschauen.


Edit: es fehlen noch einige Exceptions, die abgefangen werden müssen, es ist nicht garantiert, dass der WebCrawler, bei Eingabe einer Fehlerhaften Uri, fehlerfrei reagiert!
 

Anhänge

  • WebCrawler Vorschau.png
    WebCrawler Vorschau.png
    24,3 KB · Aufrufe: 6
  • WebCrawler.rar
    WebCrawler.rar
    106,4 KB · Aufrufe: 7
Zuletzt bearbeitet von einem Moderator:
Hey,


hab grad das zweite Pattern probiert, glaub das funktioniert jetzt, aber nur mit deutschen Trennzeichen, probiers einfach ma :)

Sieht irgendwie komisch aus das Pattern, aber es geht, zumindest für die von Dir beschriebenen Zahlen. :D


C#:
String lineTwo = "<td><span class=\"drop\">-22.235.321.234,433244k</span></td>";

Regex rex2 = new Regex(@"[^<*"">$]([+-]?[\d*.]*[\d*,]*[\d*][a-zA-Z]?)[^</*>$*]");
Match m2 = rex2.Match(lineTwo);
MessageBox.Show(m2.Value);
 
Zuletzt bearbeitet von einem Moderator:
Super danke dir! Leider kann ich das projekt in meinem Visual Studio nicht öffnen, da ich ne ältere Version hab, hab mir jedoch die Klasse ganz genau angeschaut und auch einiges übernommen, jedoch bekomm ich bei der Progress bar eine "InvalidOperationException".

hier mal der ausschnit mit der Progressbar:


public Form1()
{
InitializeComponent();

aTimer = new System.Timers.Timer(60000);
aTimer.AutoReset = true;
aTimer.Enabled = true;

pTimer = new System.Timers.Timer(1000);
pTimer.AutoReset = true;
pTimer.Enabled = true;


progressBar1.Minimum = 0;
progressBar1.Maximum = 60;
progressBar1.Value = 1;
progressBar1.Step = 1;
progressBar1.Visible = true;

aTimer.Start();
pTimer.Start();


pTimer.Elapsed += new ElapsedEventHandler(pTimer_tick);

.
.
.

private void pTimer_tick(object sender, EventArgs e)
{
progressBar1.PerformStep();

}
 
Naja,

etwas genauere Fehlerbeschreibung wäre super...


Aber du wirst evtl den Style geändert haben, damit kanns dann Probleme in dieser Konstellation geben!


edit: Benutze bitte die Klasse System.Windows.Forms.Timer, sonst garantier ich für nix, hab grad alles mit diesem getestet...
 
Zuletzt bearbeitet von einem Moderator:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement progressBar1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.


ich weiss leider echt nicht was ich damit anfangen soll ^^


edit: System.Windows.Forms.Timer gibt es iwie in meiner version nicht
 
Zuletzt bearbeitet:
sehr gut, ja das ****t! Vielen dank... jetzt heisst es erstmal abwarten, gab seit 31h kein update und ich will doch jetzt endlich wissen obs klappt :)
 
Zurück