MFC -> Datei Zeile für Zeile nacheinander einlesen, wie am Besten?

Dying Cry

Vice Admiral Special
Mitglied seit
05.01.2002
Beiträge
971
Renomée
0
Standort
Göttingen
Hallo :D

Ich wollte mit einer Anwendung in C++ MFC eine Datei öffnen und sie Zeile für Zeile einlesen,
jede Zeile auf einen String, und diesen bearbeiten.

Bisher habe ich folgendes:

Code:
	if(!file.Open (m_file, CFile::modeReadWrite))
		return 1;

	int size = file.GetLength();

	char *buffer = (char*) calloc ( size+1, sizeof(char) );				

	file.Read(buffer, size);

	CString buffer_str = buffer;

	free(buffer);

	CString row;
	int cnt_a = 0;
	int cnt_b = 0;
	int z = 0;

while(cnt_a < buffer_str.GetLength())
	{

		while(cnt_a < buffer_str.GetLength() && buffer_str[cnt_a] != '\n')
		{
			row.Insert(z, buffer_str[cnt_a]);

			cnt_a++;
			z++;
		}
		cnt_a++;
		z = 0;

                // row String hier bearbeiten

row.Empty();
}

Er liest auch Zeile für Zeile, aber wenn es so zur ca 10. Zeile kommt, macht er nur Blödsinn :( Packt in den String noch andere Zeichen rein und sowas...

Kann mir da wer helfen?!

Grüße,
 
Hallo, Du mal wieder ;)

In einer MFC-Applikation binde ich mir in der Situation nicht den MFC-Schmerz ans Bein, sondern mache das auf gute alte C-Art:
PHP:
string str = "myfile.txt";
  
FILE* fptrIn;
  
if (! (fptrIn = fopen (str.c_str(), "r")))
{
  return;  // ggf. Trace, message box, etc.
}
  
char buff [1024];
  
while (fgets (buff, 1023, fptrIn))
{ 
  // entweder parsen mit sscanf
  int x, y;
  if ( 2 == sscanf (buff, "%d, %d", &x, &y))  // z.B.
  {
   
  }
  // oder string intialisieren und weiter verarbeiten
  string blabla (buff);
}

fclose (fptrIn);
 
Zuletzt bearbeitet:
danke Meister *verneig* ;)

Ich probiers mal so!

Und wie würdest du es mit MFC machen?!
 
Und wie würdest du es mit MFC machen?!
Ich würde versuchen, es zeilenweise zu machen. So, wie ich es verstehe, liest Du das File binär ein und fummelst dann die Newlines raus.

Ich glaube, das auch (selbst?) Microsoft Routinen hat, um ein File zeilenweise einzulesen. Genaueres weiß ich aber nicht.
 
Okay, funktioniert alles :D

Danke!
 
Zuletzt bearbeitet:
Zurück
Oben Unten