Zum Inhalt springen

Frage bezüglich Console.WriteLine in C#


Empfohlene Beiträge

Geschrieben

Ich schreibe gerade ein Programm zu eigenen Übung, um mir C# beizubringen, es ist also definitiv keine Hausaufgabe, die ich hier lösen lassen will, auch wenn ich die Aufgabe von einem Übungsblatt habe -

Ich will die KWIC-Suche einmal in C# verwirkichen, dabei soll jedes Wort, das in einem Text vorkommt, in jedem Kontext, in dem es vorkommt, alphabeteisch geordnet ausgedruckt werden, das ist aber für meine Frage gar nicht relevant.

Ich habe also alle unterschiedlichen Wörter in eine ArrayList aufgenomen und diese alphabeteisch sortiert.

Jede Zeile des Textes lese ich ein und will dann für jedes einzelne Wort nachsehen, ob es in einer Zeile (die ich als string[] currentline darstelle und über die ich dann iteriere) vorkommt.

Soweit habe ich es priogrammiert - jetzt wollte ich mal die einzelen Wörter, die er beim Iterieren finde, ausdrucken, habe aber eine böse Überraschung erlebt: Er druckt scheinbar einen haufen Leerzeichen oder Leerzeilen, aber kein einziges Wort. Hier der Code:


using System;

using System.IO;

using System.Collections;



class KWIC{


public static void Main(){


string line;

ArrayList types = new ArrayList();

ArrayList lines = new ArrayList();



        try 

        {

            using (StreamReader sr = new StreamReader("TestFile.txt")) 

            {


                while ((line = sr.ReadLine()) != null) 

                {  


                      string[] words = line.Split(' ');


			    foreach(string s in words){


                 //Setze das Wort in eine Collection!   

                 if(! types.Contains(s)){

                         types.Add(s);

                          } 


             lines.Add(line.Split(' '));  




 }	



                 }

             }

        }catch (Exception e){ Console.WriteLine(e); } 


    //Hier sollen alle Wort-Types des Textes drin sein.

    types.Sort(); 




int i=0;                              

foreach(string w in types){    //Ich schaue mir jedes Type an...


                               while(i < lines.Count){         


                               //Die Woerter jeder einzelnen Zeile des eingelesenen Textes kommen in den Array currentline...   

                               string[] currentline = (string[]) lines[i];


                       //Wenn eines der Types mit einem Wort von Currentline uebereinstimmt, dann

                       //will ich es mal ausdrucken. Zu meiner großen Verwunderung druckt er einen Haufen Leerzeichen, aber kein einziges Wort.

                       foreach(string s in currentline){ if(s==w){  Console.WriteLine(w);  } }      

            i++;       

           }

        }        

  }

}

Wieso druckt "er" nix aus?

Hier meine Textdatei (http://www.sueddeutsche.de/politik/proteste-in-der-islamischen-welt-usa-befuerchten-neue-welle-der-gewalt-1.1467653):

Aussagen Obamas werden relativiert

Außenminister Guido Westerwelle hat im ARD-Morgenmagazin zu einer Abkehr von der Gewalt aufgerufen. Er appelliere an die gesamte arabische Welt, zu friedlichen Protesten zurückzukehren. Zugleich distanzierte sich Westerwelle von dem "verabscheuungswürdigen Video", das die Proteste ausgelöst hatte, und betonte, er teile die Empörung über dieses "schreckliche Pamphlet im Internet". Dieses dürfe aber nicht als Vorwand dienen für Gewalt oder die Ermordung von Menschen.

In der ägyptischen Hauptstadt Kairo protestierten aufgebrachte Muslime die ganze Nacht in dem Bezirk um die US-Botschaft. Den Tag über waren dort bei Straßenschlachten mehr als 220 Menschen verletzt worden. In der jemenitischen Hauptstadt Sanaa wurden vier Demonstranten beim Sturm auf die US-Botschaft getötet und 31 weitere verletzt. Auch in Tunesien, dem Gaza-Streifen und in Iran gingen erboste Muslime auf die Straßen. Demonstrationen gab es auch in Afghanistan und Pakistan.

Nach dem tödlichen Angriff auf das US-Konsulat im libyschen Bengasi, bei dem in der Nacht zum Mittwoch der US-Botschafter Chris Stevens und drei weitere Amerikaner getötet worden waren, nahmen Ermittler mehrere Verdächtige fest. Zur Identität und Zahl der mutmaßlichen Angreifer machte der stellvertretende Innenminister Wanis al-Scharif keine Angaben. US-Sicherheitskreise vermuten das Terrornetzwerk al-Quaida hinter der Attacke.

Der Sprecher einer Islamisten-Miliz aus der ostlibyschen Stadt bestritt jedoch, in den Angriff auf das US-Konsulat verwickelt gewesen zu sein. Die Ansar-al-Scharia-Brigade habe bei den Protesten keine Rolle gespielt, sagte ihr Sprecher nach Berichten der libyschen Nachrichtenagentur Lana.

Ägyptens Präsident Mohammed Mursi verurteilte die Gewalt. Allerdings forderte er die USA zu "ernsthaften Schritten" gegen den islamfeindlichen Videofilm auf. "Wir sind gegen jede Handlung, mit der der Islam und der Prophet Mohammed beleidigt werden soll, und wir sind gegen die Beleidigung jeder Religion", sagte Mursi nach einem Gespräch mit dem EU-Ratsvorsitzenden Herman Van Rompuy in Brüssel.

Unterdessen relativierte das Weiße Haus Äußerungen Obamas über die amerikanisch-ägyptische Beziehung. Der Präsident hatte in einem Fernsehinterview gesagt, das nordafrikanische Land sei "kein Verbündeter, aber auch kein Feind". Der Präsident habe den Begriff "Verbündeter" dabei nur im rechtlichen Sinne benutzt, sagte sein Sprecher Jay Carney. "Wie der Präsident sagte, ist Ägypten ein langjähriger und enger Partner der Vereinigten Staaten", meinte er.

Auch UN-Generalsekretär Ban Ki Moon verurteilte die Gewalt gegen US-Einrichtungen. Nichts rechtfertige solche Tötungen und Angriffe, erklärte Ban nach Angaben seines Sprechers in New York. Zugleich verurteilte der UN-Chef den "hasserfüllten Film, der offensichtlich ganz bewusst angefertigt wurde, um Fanatismus und Blutvergießen zu säen". Er rief zu Ruhe und Zurückhaltung auf. Angesichts zunehmender Spannungen brauche es Dialog, gegenseitigen Respekt und Verständnis, so Ban.

Geschrieben

Erstens: Deine Einrückung ist furchtbar. Einfach mal den ganzen Code ausschneiden und wieder einfügen hilft.

Zweitens: Du fügst etwas zu oft zu lines hinzu.

Drittens: Wenn du mit einem Type durch bist, solltest du i zurücksetzen. Oder noch besser: i gleich innerhalb der Type-Schleife anlegen.

Geschrieben
Ich schreibe gerade ein Programm zu eigenen Übung, um mir C# beizubringen, es ist also definitiv keine Hausaufgabe, die ich hier lösen lassen will, auch wenn ich die Aufgabe von einem Übungsblatt habe -

Auch ne Hausaufgabe oder sonstiges ist kein Problem. Das einzige was wichtig ist ist das man Eigeninitiative zeigt und beschreibt was man schon versucht hat und woran es genau happert und nicht einfach nur ne Aufganestellung rein kopiert und nach der Lösung fragt :)

Geschrieben

Super danke!! So geht es:


using System;

using System.IO;

using System.Collections;



class KWIC{


public static void Main(){


string line;

ArrayList types = new ArrayList();

ArrayList lines = new ArrayList();



try 

{

	using (StreamReader sr = new StreamReader("TestFile.txt")) 

        {


	while ((line = sr.ReadLine()) != null) 

        {

		string[] words = line.Split(' ');


		foreach(string s in words){


	                 //Setze das Wort in eine Collection!   

        	         if(! types.Contains(s))

			         {

                             types.Add(s);

                     } 

                }


	lines.Add(line.Split(' ')); //Zu lines wird nun nur einmal pro Durchlauf der while-Schleife geaddet. 


	}

}  

}catch (Exception e){ Console.WriteLine(e); } 


	//Hier sollen alle Wort-Types des Textes drin sein.

	types.Sort(); 





	foreach(string w in types){//Ich schaue mir jedes Type an...


        int i=0;


		while(i < lines.Count)         

        {                       

        	//Die Woerter jeder einzelnen Zeile des eingelesenen Textes kommen in den Array currentline...   

            string[] currentline = (string[]) lines[i];



            foreach(string s in currentline){ if(s==w){  Console.WriteLine(w);  } }      

            i++;       

        }

     } 



  }

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...