[C++] Daten aus .txt in 2D-Array einlesen

Lodda2003

Grünschnabel
Hallo zusammen.

Ich habe gerade das Forum nach einer Antwort durchsucht und leider nichts gefunden.

Ich habe eine Textfile, in der Informationen in der Form 1,0,2,3,1,2,4,2,6,54,233,2,1,3,0 .. etc. gespeichert sind.

Meine Frage:

Wie kann ich diese Daten in einen Array map[x][y] auslesen (aufeinanderfolgende Zahlen sind immer Wertepaare) und umgekehrt aus dem Array wieder in eine Textdatei speichern?

Wäre toll, wenn mir da jemand weiterhelfen könnte :)
 
Zuletzt bearbeitet:
moin


Ich weiss zwar nciht genau wieso du ein s Dimensionales Array nehmen willst, aber ist eigentlich auch egal.


fstream bzw. ifstream und ofstream sind Stichworte die dir aufjedenfall weiterhelfen sollten!


mfg
umbrasaxum
 
moin


Ja würdest du, wenn du es nciht verstanden hast. Einfach mal gernau dein Problem beschreiben dann kann dir auch genau geholfen werden!


OK dann werde ich mal ein Beispiel posten.

Code:
#include <iostream.h>
#include <fstream.h>
.
char pcBuff[100];
.
.
ifstream infile("test.txt");
if ( !infile.is_open()) { cout << "Fehler:Datei konnte nicht geöffnet werden\n"; return; }
while (! infile.eof() )
{
    infile.getline (pcBuff,100);
    cout << pcBuff << endl;
}

MIt dem Code wird immer eine komplette Zeile eingelesen! Bei erneutem Aufrufen der "getline" Methode wird Automatisch die nächste Zeile eingelesen.


Schreib doch einmal ganz genau wie die Zeichen in dein Array sollen.


mfg
umbrasaxum
 
Also die Funktionsweise Deines Beispiels leuchtet mir ein, danke dafür. Allerdings ist mein Array nicht ein-, sondern zweidimensional (für eine Tilemap, soll später noch weitere Dimensionen erhalten).

infile.getline (pcBuff,100); ---> Hier wird die Information aus der Zeile in den Array pcBuff[] geschrieben?

Soweit, sogut - wenn allerdings mein Array pcBuff[x][y] lautet, wie lese ich zeilenweise den x und y Wert aus? Ein infile.getline (pcBuff,x,y); funktioniert nichtm nehme ich an ... ?

Entschuldige bitte, wenn meine Frage unklar gewesen sein sollte :)
 
moin


Also wenn ich das richtig verstanden habe und die aus einer bestimmten position in einer datei etwas auslesen will guck dir die funktionen "fseek", "gseek" und so weiter an.

Hab jetzt leiden keine Zeit genauer darauf einzugehen.


mfg
umbrasaxum
 
Wie wäre es mit sowas in der Art (funktioniert noch nicht wirklich):

Code:
 ifstream filein;
   filein.open("map1.txt");
  	if (!filein) 
  	{
  		cout << "Bad Filename" <<endl;
  		return;
  	}
  
  	while (!filein.eof()) 
  	{
  		for ( int i=0; i<mapwidth; i++) 
  			{
  			for ( int j = 0; j < mapheight; j++) 
  				{
  			    filein >> map[mapwidth][mapheight];
  				}
  			}
  	}
  
  	filein.close();
 
umbrasaxum hat gesagt.:
moin


Ja würdest du, wenn du es nciht verstanden hast. Einfach mal gernau dein Problem beschreiben dann kann dir auch genau geholfen werden!


OK dann werde ich mal ein Beispiel posten.

Code:
#include <iostream.h>
#include <fstream.h>
.
char pcBuff[100];
.
.
ifstream infile("test.txt");
if ( !infile.is_open()) { cout << "Fehler:Datei konnte nicht geöffnet werden\n"; return; }
while (! infile.eof() )
{
    infile.getline (pcBuff,100);
    cout << pcBuff << endl;
}

MIt dem Code wird immer eine komplette Zeile eingelesen! Bei erneutem Aufrufen der "getline" Methode wird Automatisch die nächste Zeile eingelesen.


Schreib doch einmal ganz genau wie die Zeichen in dein Array sollen.


mfg
umbrasaxum

hey 1000 dank! Genau das Problem hat ich grad! (die Information mag belanglos sein, aber ich denke ein herzliches Danke wäre ganz sozial
 
moin


Ach, kein Ding.


Zu dem anderen Problem

Code:
char map[1000][1000];      //1000 weil ich denke das es reichen wird, bei bedarf vergrößern
char zeichen;
int zeile=0;
int stelle=0;

ifstream filein;
filein.open("map1.txt");

while (!filein.eof()) 
{
     while()
     {
          if( ( map[zeichen][zeile] = filein.get() ) == '\n')
               break;

          zeichen++;
     }

     zeile++;
}

Kann es jetzt nciht testen, sollte aber laufen.
Hoffe es ist verständlich.


mfg
umbrasaxum
 
Zurück