Textdatei in zweidimensionales Array einlesen



  • Hallo Zusammen,

    ich bin neu hier im Forum und hoffe ihr könnt mir weiterhelfen.
    Folgendes Problem: Ich muss eine Textdatei, bestehend aus 1 und 0 (getrennt durch Leerzeichen) in ein zweidimensionales Array einlesen um es später im Programm zu verwenden. Den Inhalt der Datei bekomme ich zwar auf den Bildschirm, allerdings weis ich nicht wie ich das Array befüllen kann?
    Vielen Dank bereits.

    #include <iostream> 
    #include <conio.h>     
    #include <fstream>  
    #include <stdlib.h>
    #include <string> 
    using namespace std;
    
    //Hauptprogramm
    int main ()
    {
    	//Abfrage Dateiname
        char Dateiname [20];
        cout << "Bitte geben Sie den Namen der gewuenschten Datei ein:" << endl;
        cin >> Dateiname;
    	
    
    	//Einlesen und Ausgeben der Textdatei
    	char feld [30][30];
        ifstream einlesen;                               
        einlesen.open(Dateiname, ios::in);             
        string zeile;                             
        while (!einlesen.eof())                         
            {
            getline(einlesen, zeile);
            cout << zeile << endl;  
        
        system("pause");
        return 0; 
    	
    
    
    }
    `
    


  • Schreib' bitte in eine Zeile vor Deinem Code ``` und in eine Zeile nach deinem Code ```. Alternativ markiere Deinen Code und klicke auf das </> über dem Bearbeitungsfenster. Den Link zum Bearbeiten Deines Beitrags findest Du rechts unter Deinem Beitrag in dem Drei-Punke-Menü.

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    while (!einlesen.eof())

    Why is iostream::eof inside a loop condition considered wrong?

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Ich muss eine Textdatei, bestehend aus 1 und 0 (getrennt durch Leerzeichen) in ein zweidimensionales Array einlesen um es später im Programm zu verwenden.

    Geht die Aufgabenstellung auch genauer? Kennst Du std::string und std::vector<>?



  • Wie meinst du genauer? Das ist eigentlich genau die Aufgabe momentan.
    std::string und std::Vector habe ich noch nicht verwendet und weis auch nicht wie ich es anwenden kann.


  • Banned

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    std::string und std::Vector habe ich noch nicht verwendet

    Gibt es auch nicht in C. Vergiss diesen Quatsch am besten ganz schnell. Das Fischlein kennt nur C++. Da ist alles so ziemlich 'anders'.



  • @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Wie meinst du genauer?

    Naja, wie viele Zeilen, Spalten hat das Ding maximal, was passiert mit Werten, die nicht in der Datei stehen? Was soll mit diesen Werten überhaupt gemacht werden?



  • Ich mache das Programm schon in C++
    Die Textdatei hat immer 30 zeilen und 30 spalten und nur 1 und 0.
    Im Anschluss soll im Feld nach bestimmen Zeichen gesucht werden.

    Kannst du mir bitte einen Tipp geben wie ich nun z.B. die eingelesenen Zeilen in ein Array schreiben kann? Oder muss ich komplett anders beginnen?



  • @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Im Anschluss soll im Feld nach bestimmen Zeichen gesucht werden.

    es sind doch nur 0 und 1. Oder meinst du Muster?

    Was soll in dem Array stehen?
    Zahlenwerte 0 und 1 oder Zeichen '0' und '1'



  • Sorry, ich meinte natürlich Muster, und es handelt sich um Zahlenwerte.



  • @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    std::string und std::Vector habe ich noch nicht verwendet und weis auch nicht wie ich es anwenden kann.

    Und was ist in Zeile 21?



  • @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Sorry, ich meinte natürlich Muster, und es handelt sich um Zahlenwerte.

    Dann solltest du das Array als unsingend char oder int definieren.

    Dann kannst du die Werte mit zwei verscachtelten Schleifen einlesen.



  • An welcher Stelle würdest du sie einbauen? ich habe bereits in der while Schleife eine for Schleife eingebaut und von zeile 0 bis zeile 30 die eingelesenen zeilen geschrieben. Allerdings kam das falsche heraus bzw. konnte nicht compiliert werden.



  • @Liptons17 leider schreibst du nicht, wie du es versucht hast (den Code) und was raus kam.



  • Ich habe es mal so probiert, allerdings weis ich nicht wie genau ich die eingelesene Zeile in das Feld bringe.
    Außerdem ist mir die verschachtelte Schleife unklar, da ich doch eigentlich nur bei jedem einlesen eine Zeile im Array nach unten rutsche?

    #include <iostream> 
    #include <conio.h>     
    #include <fstream>  
    #include <stdlib.h>
    #include <string> 
    using namespace std;
    
    //Hauptprogramm
    int main ()
    {
    	//Abfrage Dateiname
        char Dateiname [20];
        cout << "Bitte geben Sie den Namen der gewuenschten Datei ein:" << endl;
        cin >> Dateiname;
    	
    
    	//Einlesen der Textdatei
    	int feld [30][30];
    	int i,k=0; //i Spalte, k Zeile
        ifstream einlesen;                               
        einlesen.open(Dateiname, ios::in);             
        string zeile;                             
        while (!einlesen.eof())                         
            {
            getline(einlesen, zeile);
            for (i=0; i<30; i++){		// Schleife zum Einlesen ins Feld
            	zeile >> feld [i][k];	// Wie wird eingelesen?
    			}
    			k++						
            cout << zeile << endl; 		// Test ob alles eingelesen
    		};
    
    	cout << feld[3][3] << endl; // Testen ob Feld richtig gefüllt, muss hier 0 sein
    	
        system("pause"); 
        return 0; 
    }
    

  • Banned

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Ich muss eine Textdatei, bestehend aus 1 und 0 (getrennt durch Leerzeichen) in ein zweidimensionales Array einlesen um es später im Programm zu verwenden

    Hat die Datei immer eine feste Anzahl an Zeilen und hat eine Zeile immer eine feste Anzahl an Nullen/Einsen?

    Schreib doch erstmal ein Unterprogramm, das eine Zeile in ein Array einliest.



  • @Liptons17 lass das getline weg und lies direkt mit cin in das Array.

    Wenn das immer 30x30 ist kannst zwei for-Schleifen nehmen.



  • Ich kann verstehen, dass du/ihr die Lösung nicht schreiben wollt, aber ich stehe einfach total auf dem Schlauch. Müssen die for schleifen dann in oder hinter die while schleife? Du meinst schon zwei verschachtelte for schleifen oder?


  • Banned

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Ich kann verstehen, dass du/ihr die Lösung nicht schreiben wollt, aber ich stehe einfach total auf dem Schlauch.

    Das hat verschiedene Gründe. Hauptgrund ist wohl, dass niemand die exakte Spezifikation der Datei kennt, die du einlesen willst,



  • Daran soll es natürlich nicht scheitern.

    • Einlesen einer .txt Datei
    • Inhalt z.B.:
      1 1 0 1... (30 Spalten, getrennt durch Leerzeichen)
      1
      0
      0
      .
      .
      .
      (30 Zeilen)
      Der Inhalt beginnt am Anfang der Zeile 1.
      Der Inhalt soll in ein 2d Array.

  • Banned

    @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Daran soll es natürlich nicht scheitern.

    • Einlesen einer .txt Datei
    • Inhalt z.B.:
      1 1 0 1... (30 Spalten, getrennt durch Leerzeichen)
      1
      0
      0
      .
      .
      .
      (30 Zeilen)
      Der Inhalt beginnt am Anfang der Zeile 1.
      Der Inhalt soll in ein 2d Array.

    Danke!

    Deine erste Aufgabe ist IMHO das Zeilenweise einlesen einer Datei. Siehe hier z.B: https://www.daniweb.com/programming/software-development/code/216411/reading-a-file-line-by-line
    Als Nächstes könntest du dir die Funktion 'strtok' anschauen.

    Nur Geduld, Bro. Das wird schon. 🐱



  • @Liptons17 sagte in Textdatei in zweidimensionales Array einlesen:

    Müssen die for schleifen dann in oder hinter die while schleife?

    Stattdessen.

    Du meinst schon zwei verschachtelte for schleifen oder?

    Ja.
    Hatte ich geschrieben.


Log in to reply