Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.02.2013, 16:38

C# String Filtern

Hallo.
Mit
string urlScr = wClient.DownloadString(urlUpdated);


Lade ich mir einen Source code Rrunter.
Bei meinen Versuchen ist esjetzt immer die selbe seite.
Jetzt versuche ich einen namen rauszufiltern mit

int pos1 = urlScr.IndexOf("given-name");
int pos2 = urlScr.IndexOf("</span> <span class=");


Console.WriteLine(pos1);
Console.WriteLine(pos2);


Jetzt gibt der mir immer 7737 mit 7755 oder 7726 mit 7744.
Warum bleiben die positionen nicht immer gleich?(Der quellcode der seite bleibt exakt gleich!)

Wie kann ich also aus diesem String Max und Mustermann in seperaten Strings kopieren..
<h1 class="fn n"><span class="given-name">Max</span> <span class="family-name">Mustermann</span></h1>

2

27.02.2013, 17:27

Um solche Strings zu filtern wäre Regex eigentlich am besten geeignet. Am besten einfach mal nach einem Tutorial suchen, mit Regex kann man wirklich unglaublich viel machen

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Telcrome« (28.02.2013, 10:07)


SilentDragon

Alter Hase

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

3

27.02.2013, 18:05

Hey hatte vor ner weile das Selbe Problem, bei mir lag es an .IndexOf
Als ich indexOf mit nur einem Zeichen benutzt habe z.b. int i = string.IndexOf("<"); hats prima geklappt sobald es mehr als 1 Zeichen war gabs probleme.
Wenn es sich in deinem Fall IMMER an der selben stelle befindet benutz doch Substring z.b. String t = t.Substring(22); so kannst du den Anfang wegschneiden.
Dann mit indexof nach dem beginn des Tags suchen IndexOf("<") und mit diesem index t.Remove(i);
so pflüge ich jetzt durch meine XML Dateien geht schnell und solange sie immer gleich aufgebaut sind gibt es auch keine Probleme ^^
...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

27.02.2013, 18:19

Ich hatte noch nie Probleme mit IndexOf und die Ergebnisse sind bei selbem Input auch stets deterministisch. Ich glaube also nicht, dass die Eingaben immer identisch sind.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

27.02.2013, 21:16

Ok danke.
Kann mir jemand sagen, warum der bis zu 30 secunden braucht um 40.000 zeichen zu downloaden?
Ich meine, wenni ch mit dem Browser die Seite öffne macht der das in 2 Sekunden, wenn nicht schneller.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

28.02.2013, 07:40

Kommt darauf an, wie du die Seite abfragst.

Ich würde grundsätzlich dazu raten, die Seite zu parsen. Wenn es eine XML-Datei wäre, wäre das eher weniger ein Problem, bei HTML kann es allerdings häufiger der Fall sein, dass der Inhalt nicht XML-Konform ist (bspw. wenn Tags nicht geschlossen werden).
Sollte sich das Format niemals ändern (sehr sehr unwahrscheinlich), kann man auch überlegen, es weiterhin so zu betreiben.
Sollte man Einfluss auf den Inhalt haben, sollte man sich auch keine HTML-Dateien herunterladen, sondern ein einfacher auszuwertendes Format, wie XML, CSV oder bei sehr wenigen Werten (Name und Vorname) evtl. auch einfache Textdateien.

Und ich muss BlueCobold zustimmen:
Falsche Ergebnisse von IndexOf liegen an falschen Eingaben oder falschen Vermutungen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

7

28.02.2013, 11:31

Grrr.
Ich kiege diesen schei** String nicht gefiltert.
Es geht darum von Xing, namen, vornamen raus zu filtern.
Aber egal was ich mache, wenn ich einen String mit dem Quellcode habe, verhält sich der string nie wie ich es will, ich kann alle möglichen methoden aufrufen, aber der string verändert sich nicht.
Kann mir einer sagen, wie ich anhand von einem start wert und einem end wert Zeichen aus einem String in einen anderen String kopieren oder meintwegen auch ausschneiden kann?
Mich nervts langsam, dass es einfach auch nach unzählöigen veruschen nicht gehen will.

Sorry wenn ich genervt rüber komme .

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

28.02.2013, 11:42

Strings sind immutable und bleiben das auch.
Wie wär's mal die Doku zum Datentyp "string" zu lesen? Dann ist man auch weniger genervt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

28.02.2013, 11:58

using System;

using System.IO;

using System.Net;

using System.Text.RegularExpressions;



namespace test

{



class Program

{

static int Main()

{

WebClient wclient = new WebClient();

int quellcodeLength;

Console.WriteLine("start download...");

string quellcode = wclient.DownloadString("http://www.xing.com/profile/Henric_Heesen");

Console.WriteLine("finished download...");



quellcodeLength = quellcode.Length - 3;



Console.WriteLine(quellcode.Length);

Console.WriteLine(quellcode.Substring(3,quellcodeLength));









Console.ReadKey(true);

return 0;

}



}

}



Warum... Warum... Warum,
zeigt der den ganzen quelltext an und nicht nur die ersten 3 zeilen ?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

28.02.2013, 12:00

Das ist nicht der ganze. Die ersten 3 Zeichen fehlen.

Werbeanzeige