Dynamisches Array



  • Ich bin in Sachen Windows-Anwendungen noch ein totaler Noob und habe bis jetzt fast nur Konsolenanwendungen programmiert.

    Ich soll gerade ein Projekt umsetzen, wo Datensätze bestehend aus je 4 Zeilen aus einer Datei gelesen werden sollen, möglichst in einem dynamischen Array abgespeichert werden sollen und dann global für die Ausgabe auf dem Bildschirm zur Verfügung gestellt werden müssen.

    Ich habe es mit ArrayList versucht, allerdings hab ich dies nicht global hinbekommen. Jetzt habe ich eine alternative Lösung gefunden, die mir allerdings nicht gefällt (Mögelpackung):

    Ich durchlaufe die Datei und zähle die Anzahl der Datensätze, erzeuge dann ein Array mit der nötigen Anzahl an Elementen und durchlaufe die Datei von neuem:

    public ref class Form1 : public System::Windows::Forms::Form
    	{
    	array<String^> ^Symbol;
    	array<String^> ^String1;
    	array<String^> ^String2;
    	array<String^> ^AndereSprache;
    	int Index,i,maxIndex;
    
    ...
    
    private: 
    		System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			//ArrayList ^Liste = gcnew ArrayList();
    			StreamReader ^datei = gcnew StreamReader("FehlerListe.txt");
    			String ^Zeile0 = "";
    			String ^Zeile1 = "";
    			String ^Zeile2 = "";
    			String ^Zeile3 = "";
    			maxIndex=0;
    			while (datei->Peek() != -1)
    			{
    				Zeile0 = datei->ReadLine();
    				Zeile1 = datei->ReadLine();
    				Zeile2 = datei->ReadLine();
    				Zeile3 = datei->ReadLine();
    				maxIndex++;
    			}
    			Symbol = gcnew array<String^>(maxIndex);
    			String1 = gcnew array<String^>(maxIndex);
    			String2 = gcnew array<String^>(maxIndex);
    			AndereSprache = gcnew array<String^>(maxIndex);
    			datei->Close();
    			StreamReader ^datei2 = gcnew StreamReader("FehlerListe.txt");
    			i=0;
    			while (datei2->Peek() != -1)
    			{
    				Symbol[i] = datei2->ReadLine();
    				String1[i] = datei2->ReadLine();
    				String2[i] = datei2->ReadLine();
    				AndereSprache[i] = datei2->ReadLine();
    				i++;
    			}
    			datei2->Close();
    			geladen=1;
    			if (geladen==1)
    			{
    				this->textBox1->Text = Symbol[Index];
    				this->textBox2->Text = String1[Index];
    				this->textBox3->Text = String2[Index];
    				this->label4->Text = AndereSprache[Index];
    				this->textBox4->Text = Convert::ToString(Index);
    				this->label6->Text = Convert::ToString(maxIndex);
    			}
    		}
    

    Über einen Tipp, wie man das ganze "schöner" gestalten kann, wäre ich sehr froh.



  • Hier ein wenig Code als Tip:
    (Die Klasse List<T> befindet sich im namespace System::Collections::Generic.)

    Simon

    value struct Eintrag
    {
    	String^ Symbol;
    	String^ String1;
    	String^ String2;
    	String^ AndereSprache;
    };
    
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    	List<Eintrag> ^liste = gcnew List<Eintrag>();
    	StreamReader ^datei = gcnew StreamReader("FehlerListe.txt"); 
    	while (datei->Peek() != -1) 
    	{
    		Eintrag eintrag;
    		eintrag.Symbol = datei->ReadLine(); 
    		eintrag.String1 = datei->ReadLine(); 
    		eintrag.String2 = datei->ReadLine(); 
    		eintrag.AndereSprache = datei->ReadLine();
    		liste->Add(eintrag);
    	}
    	datei->Close();
    }
    

Anmelden zum Antworten