Zeilen einzeln lesen

untread

Erfahrenes Mitglied
Hallo,

hab zwar ziemlich jeden Thread zu dem Thema durchgeschaut aber bin leider nicht auf einen Grünen Zweig gekommen.

Und zwar möchte ich aus einer Text Datei Werte einlesen, die in dieser folgendermaßen stehen:

1
5
4
13
12
.
.
.


Jetzt müsste ich nur noch wissen wie ich mit dateiname.ReadString(line) nicht nur die 1. Zeile sondern auch die anderen einlesen kann?!
Wo kann ich einen Parameter setzen um in die gewünschte Zeile zu gelangen?

Kurz gesagt, jedes dieser Elemeten soll in nem Array stehen (zahl[ i ])

mfg Harry
 
untread hat gesagt.:
Wo kann ich einen Parameter setzen um in die gewünschte Zeile zu gelangen?

Nirgends. Readstring kann die Datei nur sequentiell auslesen, also eine Zeile nach der anderen. Direkter Zugriff auf eine beliebige Zeile geht nicht. Zeilen können ja unterschiedlich lang sein, woher sollte also ein Lesebefehl wissen, wo innerhalb der Datei eine bestimmte Zeile beginnt.
 
Hi,
mach ne Schleife:

Code:
While ( dateiname.ReadString(line) )
{
    //Was du mit eingelesenem String machen willst
}

Gruß Squeegee
 
Hm irgendwie haut bei mir was mit der Typenkonvertierung nicht hin

Zuerst schreibe ich die Werte in das array zeilen[100]; aber wenn ich die einzelnen Werte in der unteren for Schleife aufrufen möchte dann passen diese überhaupt nicht.

Muss ich das Array anders anlegen oder anders formatieren?


Code:
CStdioFile file("datei.txt",CFile::modeRead); 

    CString temp = _T(""); 
    CString str = _T("");  
    char zeilen[100] = "";
	int j=0;
	

	while(file.ReadString(temp) != NULL) 
    {
		str += temp + "\r\n"; //hängt ein Zeilenende an den String
		  
		const char* ptemp=NULL;
		ptemp = (LPCTSTR) temp;
		zeilen[j] = atoi(ptemp);
		
		
		j++;
		max=j;

    }
	
	
	MessageBox(str);
	CString testausgabe;
	testausgabe.Format("%s",zeilen[j]);
	
	pDC->MoveTo(0,0);
	for(j=0; j<=max;j++)
	{
		pDC->LineTo(1000*j,zeilen[j]);
		MessageBox(testausgabe);
	}
 
Hi,
falls du die Zahlen in der Message in deiner Schleife meinst, die passen deswegen nicht, weil du den Wert ja auch nicht neu einliest.

Code:
testausgabe.Format("%s",zeilen[j]);

muss in die Schleife.
Sonst hab ich jetzt auf die Schnelle keinen Fehler gefunden, aber das kannst du auch selber rausfinden, wo das Problem liegt, wenns das nicht war, steppe einfach durch den Code und schau mal, welche Werte er in deinen Array schreibt. Und schau dir dabei im Debugger deinen Array genau an, was wo steht...

Grüße Squeegee
 
Hi.
untread hat gesagt.:
Muss ich das Array anders anlegen oder anders formatieren?
Ja. Wenn du C-Strings in deinem Array speichern willst, dann mußt du es auch als Array von C-Strings deklarieren:
Code:
char zeilen[100][256]; /* 100 Strings a 256 Zeichen.  */

Wenn du atoi verwenden willst, dann solltest du auch Integer im Array speichern (die Funktion atoi gibt schließlich einen int zurück):
Code:
int zeilen[100];
Dann mußt du bei der Ausgabe natürlich drauf achten das Format %d zu nehmen und nicht %s.

Gruß
 
Hi deepthroat,
mit char hast du recht, das ist tatsächlich falsch, aber er speichert chars (oder eben integers) in dem Array, er wandelt die CString ja mittels atoi um...

Grüße Squeegee
 
@Squeegee: Ja, ich war mir nicht sicher was genau nun gespeichert werden sollte. Einerseits nutzte er atoi und andererseits wieder die Ausgabe mit %s (was auch für char nicht richtig ist!).

Gruß
 
Zurück