Frage von Mihajlangelo, 26

Wie gebe ich meinen foreach-Resultaten string-Werte(C#)?

Für eine App, die ich gerade programmiere brauche ich die Resultate einer Regex-Operation, die durch einen foreach-Loop sortiert wurden als einzelne Variablen. Ich hoffe, dass mir jmd. da helfen kann. Konkret suche ich nach Events die auf einer Website gelistet sind. Diese sind in der XML zu finden(klappt alles). Nun möchte ich den Output(Event-Titel) der foreach-Schlaufe als einzelne strings darstellen(hier habe ich Mühe). Danke an alle c#-Asse da draussen!

IEnumerator WaitForRequest()
{
    WWW www = new WWW (URL); //Website aufrufen und XML downloaden
    yield return www;

    if (<a href="http://www.error">www.error</a> == null) 
    {
        Debug.Log ("WWW Ok!");
        wholeXML = <a href="http://www.text.ToString">www.text.ToString</a> (); //XML als string darstellen
        Debug.Log ("Whole XML-Download: " + wholeXML);
        usefullXmlPart= wholeXML.Substring (14000, 20000); 

//der Start und Anzahlwert sind durch Erproben bestimmt worden Debug.Log ("Usefull part of XML: " + usefullXmlPart);

        // // //REGEX

        MatchCollection eventTitles = Regex.Matches (wholeXML, "data-height=\"60\">.+?<", RegexOptions.Singleline); 
        // Sucht den Begriff (data-height="60">) und die folgenden Chars(symbolisiert durch .+? ) bis zum Zeichen >
        foreach (Match now in eventTitles) 
        {
            
            string regexString = now.ToString ();
            string specificRegexString = regexString.Substring (17, regexString.Length - 18); //Starte beim 17 und ende bei der string-Länge - Startort 

//HIER ERHALTE ICH ZWAR ALLE WERT (bspw. "specific1", "specific2", usw.) Debug.Log (specificRegexString); textFeld.text = specificRegexString;

        }

    } else 
    {
        Debug.Log ("WWW Error: " + <a href="http://www.error">www.error</a>);
    }
} 

//MEIN ZIEL WÄRE ES AM ENDE FÜR JEDES FOREACH ERGEBNIS EINEN VERKNÜPFTEN STRING ZU HABEN: private string StriOne = "special1" private string StriTwo = "special2" usw.

Antwort
von greenvbuser, 10

Hi! Zunächst ein kleiner gutgemeinter Rat: Überarbeite deine Frage noch mal damit der Code nicht so zerstückelt wird. So ist er extrem schlecht lesbar.

Nun ans Eingemachte. Du möchtest für jeden Schleifendurchlauf ein Ergebnis als String haben. Das ließe sich bis zu einem gewissen Grad über ein Array realizieren. Aber ein Array hat eine feste Größe, die du am Anfang setzen musst. Deshalb eignet sich ein Array hier nur, wenn du genau weißt, wie viele Strings du am Ende herausbekommst.

Mein Vorschlag wäre die Liste:

private List<string> myResultStrings;

public MyConstructor()
{
myResultStrings = new List<string>();
}

So kannst du später die jeweiligen Ergebnisse deiner individuellen Schleifendurchläufe mit

myResultStrings.Add(myResult);

der Liste hinzufügen.

Kommentar von Mihajlangelo ,

Ok ich werde mir das anschauen. Herzlichen Dank für die konkrete Antwort. Beste Grüsse

Kommentar von NMirR ,

bei einer foreach Schleife kann man aber eigentlich immer die Durchläufe davor zählen

Kommentar von greenvbuser ,

Dann müsste man (in diesem Fall unnötigerweise) eine zweite Schleife einbauen. Nicht sehr effizient.

Kommentar von NMirR ,

Nein muss man nicht. Ich habe extra "davor" geschrieben, nicht darin.

Kommentar von regex9 ,

Über das Count-Property der MatchCollection lässt sich ermitteln, wie viele Ergebnisse es gibt. Darauf basierend kann ein Array angelegt und mittels Iterationsschleife durchlaufen werden.

Kommentar von greenvbuser ,

Ok, das ist effizienter :D

Antwort
von NMirR, 16

Warum keinen Array?

Kommentar von Mihajlangelo ,

Wie meinst du das genau? An welcher Stelle würdest du mit einem Array arbeiten? Wäre toll wenn du mir ein Bsp machen könntest. Herzlichen Dank

Kommentar von Mihajlangelo ,

Ergänzung:

Das Ding ist ja, dass ich die Werte die ich brauche im foreach-loop aus der Xml ermittle. Diese Werte können in der Console ausgegeben werden, aber das zuweisen der Werte an einen string gelingt mir nicht. 

Keine passende Antwort gefunden?

Fragen Sie die Community