Entwickler-Ecke
Netzwerk - Internet-Txt auslesen und nach Zeile suchen
Spectus.gn - Fr 15.09.06 16:18
Titel: Internet-Txt auslesen und nach Zeile suchen
Hallo,
ich möchte ein programm schreiben mit Windows-forms-window.
Das problem ist folgendes.
In der Textbox soll eine Internetaddy stehen, die dann per Button.Click geladen wird und anschließen die Zeile 3 oder 4 ausgegeben wird. Ich habe leider keine Ahnung wie das funktionieren soll.
Vielleicht kann mir ja jemand helfen.
Benutze C# (VS2005Pro).
MfG
Spectus.gn
Danke schonmal für die Mühe
Moderiert von
Christian S.: Titel geändert.Moderiert von
Christian S.: Topic aus IO, XML und Registry verschoben am Fr 15.09.2006 um 17:23
Christian S. - Fr 15.09.06 16:24
Hallo!
Ich kopier es einfach mal aus 'ner laufenden Anwendung von mir raus. Wenn Du Schwierigkeiten hast, es nach C# zu übersetzen, meld Dich nohcmal ;-)
Chrome-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| method MainForm.GetHTMLSource(url : String) : List<String>; begin var request := WebRequest.Create(url) as HttpWebRequest; var response := request.GetResponse() as HttpWebResponse; using sr := new StreamReader(response.GetResponseStream, Encoding.UTF8) do begin result := new List<String>(); while not sr.EndOfStream do result.Add(sr.ReadLine); end; end; |
Grüße
Christian
Spectus.gn - Sa 16.09.06 10:48
jab, hab ich... ;)
hab erst wieder angefangen und mein wissensstand ist gen mull.
danke schonmal
Christian S. - Sa 16.09.06 11:05
Okay, hier das ganze in C#:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| using System; using System.Net; using System.IO; using System.Collections.Generic; using System.Text;
namespace ConsoleApplication4 { class Program { static void Main(string[] args) { List<String> lines = GetHTMLSource(@"http://www.delphi-forum.de"); if (lines != null && lines.Count >= 4) { Console.WriteLine(lines[2]); Console.WriteLine(lines[3]); } Console.ReadLine(); }
static List<String> GetHTMLSource(string Url) { List<String> result = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { result = new List<string>(); while (!sr.EndOfStream) result.Add(sr.ReadLine()); }
return result; } } } |
Ich finde, so unterschiedlich sind die Quelltexte gar nicht, nur dass man den hier jetzt halt per Copy & Paste übernehmen könnte :zwinker:
Grüße
Christian
Spectus.gn - Sa 16.09.06 14:36
Hi, danke für deine bemühungen.
Der Code ist gut, hat allerdings einen Haken.
wenn die Website jetzt 1000e Zeilen Quelltext hat und ich Zeile 2341 (z.B.) möchte wird der nie im leben fertig.
Hast du eine Idee, wie man den Code optimieren kann?
Danke schonmal
---------------------------
Optimieren hat geklappt. Rennt jetzt wie ne angestochene Maus.
Hast du eventuell auch noch ne Idee, wie ich von der Ausgelesenen Linie mir nur Zeichen 3 und 4 ausgeben lasse?
Mfg
Danke schonmal
Christian S. - Sa 16.09.06 15:06
Spectus.gn hat folgendes geschrieben: |
| Optimieren hat geklappt. |
WIe hast Du optimiert?
Spectus.gn hat folgendes geschrieben: |
| Hast du eventuell auch noch ne Idee, wie ich von der Ausgelesenen Linie mir nur Zeichen 3 und 4 ausgeben lasse? |
Du kannst auf die Zeichen eines Strings zugreifen, wie auf die Elemente eines Arrays.
Spectus.gn - Sa 16.09.06 15:14
Habe den Code wie folgt minimal abgeändert
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| using System; using System.Net; using System.IO; using System.Collections.Generic; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { List<String> lines = GetHTMLSource(@"http://www.c-sharp-forum.de"); Console.WriteLine(lines[16]); Console.ReadLine(); }
static List<String> GetHTMLSource(string Url) { List<String> result = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { result = new List<string>(); while (!sr.EndOfStream) result.Add(sr.ReadLine()); }
return result; } } } |
Augrund der vielen zeilen habe ich die If-Abfrage weggelassen. Die Zeit ist auf ein viertel gefallen. Dein COde ist dennoch sehr gut.
kannst du mir schreiben, wie du das meinst mit dem auf die Strings zugreifen und so? :oops:
danke schonmal
Christian S. - Sa 16.09.06 15:38
:shock: Die if-Abfrage dauert so lange? Da muss ich mich mal näher mit beschäftigen.
Zu den Zeichen im String:
C#-Quelltext
1: 2:
| string myString = "foobar"; Console.WriteLine(myString[2]); |
Grüße
Christian
Spectus.gn - Sa 16.09.06 15:43
das Problem, dass das so lange gedauert hat bestand darin, dass die Website knapp 2,5k Zeilen hatte. Und ich ne Zeile um Nummer 1800 wollte. Darin bestand das problem. Dennoch war deine If-Abfrage kurz und knapp formuliert.
Danke.
Ich werde wahrscheinlich noch mehr fragen haben also thread bitte noch nicht schließen.
Danke nochmal.
Jetzt wird erstmal weitergetüftelt.
Christian S. - Sa 16.09.06 15:52
Ist mir trotzdem unerklärlich. Die Prüfung auf "null" fällt definitiv nicht ins Gewicht und die Abfrage von "count" ist unabhängig von der Anzahl der Zeilen. Das sagt nicht nur die Doku ( ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETFX30SDK4VS.1033/cpref8/html/P_System_Collections_Generic_List`1_Count.htm ), sondern kann man sich auch mittels des Reflectors ansehen.
Daher ist es mir ein Rätsel, wie die if-Abfrage soviel Zeit in Anspruch nehmen soll.
Threads schließen wir generell nicht, aber für neue Fragen sollte ein neuer Thread erstellt werden, damit es übersichtlich bleibt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!