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



## Lodda2003 (9. Oktober 2004)

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


----------



## Tobias K. (9. Oktober 2004)

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


----------



## Lodda2003 (9. Oktober 2004)

Also wenn mir das Stichwort ifstream weitergeholfen hätte, würde ich ja nicht hier im Forum fragen ... ?


----------



## Tobias K. (9. Oktober 2004)

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.


```
#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


----------



## Lodda2003 (9. Oktober 2004)

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


----------



## Tobias K. (9. Oktober 2004)

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


----------



## Lodda2003 (9. Oktober 2004)

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


```
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();
```


----------



## Java/CppProgrammer (9. Oktober 2004)

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!
> ...



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


----------



## Tobias K. (9. Oktober 2004)

moin


Ach, kein Ding.


Zu dem anderen Problem


```
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


----------

