Datei auslesen und ausgeben C++ 

Status
Für weitere Antworten geschlossen.
T

Tik0

Hallo FSBler!!!

Ich muss für die schule nen kleines Textverarbeitungsprogramm schreiben. aber ich steh schon vor der ersten Hürde.

Unzwar will ich eine Datei öffnen(
Ich habe es alles schon soweit geschafft, nur wird nichts ausgegeben.
Im debugmode zeigt er an, das "m_TextEinAusgabe" beim ersten schleifendurchlauf ein Wort enthält, aber ab dem zweiten schleifendurchlauf steht nix mehr in der Variable.

Oder gibt es noch eine komplett andere Lösung als meine??? :

PHP:
void CMenuesundTextverarbeitungDlg::OnDateiOeffnen()
{
CFileDialog ldFile(true);
// Dialogfeld File Open zeigen und Ergebnis auffangen
if(ldFile.DoModal() == IDOK)
{
// Gewählten Dateinamen ermitteln
m_strDateiname = ldFile.GetFileName();
}

FILE *fp;
int x;
UpdateData(true);


CStringArray Apuffer;
CString puffer;

for(x=0;;x++)
{
if(feof(fp)) break;
fscanf(fp,"%s ",puffer);
//m_TextEinAusgabe =m_PufferTEA + m_puffer;
Apuffer[x] =puffer;

UpdateData(false);
}

UpdateData(false);
fclose(fp);
}

Danke schon mal im Vorraus
 
Hi, was für ne IDE benutzt du?
Ich vermute mal das du die Zeile "m_TextEinAusgabe =m_PufferTEA + m_puffer;" auskommentiert hast um zu Zeigen wo der Fehler auftritt? Weil ansonsten ist es klar das nichts übernommen wird, da du dem editControl ja garkeine Daten übergibst...

Was macht denn die methode UpdateData()? Das Programm ist C++ also solltest du auch beim Einlesen bei C++ bleiben:
PHP:
ifstream file(dateiname);
std::string buffer;
while(!file.eof()) // durchläuft alle zeilen bis ende
getline(file, buffer);
cout }
file.close();

in "buffer" steht die Zeile die grade gelesen wurde und nun in dem Editcontrol angefügt werden soll. Mein erster Tipp wäre zu versuchen ob der += operator überladen ist. Sprich: editControl+=buffer.c_str();

Cheers Zerd
 
Das UpdateData() bewirkt das in einer MFC-Anwendung des Fenster Akualisiert wird, und ich so den test sehe , der geladen wurde...

Wiegesagt, ich bin in einer MFC-anwendung, und nicht in einer Consolenanwendung, deswegen kann man cout ja nicht benutzen..... ODER???:eek: :eek:

Ich habe außversehen nen bissle kram in die schleife koppiert..... eigentlich heißt sie so:
PHP:
for(x=0;;x++) 
{ 
if(feof(fp)) break; 
fscanf(fp,"%s ",puffer); 
//m_TextEinAusgabe += puffer; 

UpdateData(false); 
}

m_TextEinAusgabe ist vom Datentyp CString und wird jedes mal bei einem UpadateData(false) in das "EditControl" fenster der MFC Anweisung geschrieben.

MFG Tik0
 
Zeig mal bitte die UpdateData methode...

Das cout war jetzt nur als beispiel gedacht. Anstelle von cout steht dann bei dir das einfügen in das edit control...
 
Also UpdateData() is ne standart funktion in MFC..... ich weis nicht in welchem Heade die implementiert ist, aber ich glaub windows.h.

es gibt UpdateData(true)
und UpdateData(false) < zum ausgeben der Werte
 
Also irgendwas ist mir nich so ganz klar bei deinem Programm...
was ist das EditControl? m_TextEinAusgabe??

Ich hab leider nur dir express version vom visual studio, sonst würd ich dein projekt mal importieren und ansehen, aber wenns mfc ist dürfte es nicht klappen...
 
Editcontrol fenster sind die fenster, in denen etwas in einer MFC anwendung stehen kann. m_TextEinAusgabe ist die Variable die mit dem editcontrollfenster verknüpft ist....

was da heißen soll: was in der Variable steht sieht man nachher auf dem Bildschirm.
 
Ja was ein EditControll ist weiß ich ;) Ich wusste nur nicht ob das die dazugehörige variable ist...

Bist du denn sicher das deine Textdatei-Lesen-Funktion klappt? weil ansonsten würde ich sagen das das richtig ist was du da machst... Du könntest sonst auch mal versuchen ob du bei der initialisierung text per m_TextEinAusgabe += "Blaa"; eingeben kannst...
 
Habe jetzt nen bissle rumprobiert und letztendlich die lösung gefunden:
PHP:
void CMenuesundTextverarbeitungDlg::OnDateiOeffnen()
{
CFileDialog ldFile(true);
// Dialogfeld File Open zeigen und Ergebnis auffangen
if(ldFile.DoModal() == IDOK)
{
// Gewählten Dateinamen ermitteln
m_strDateiname = ldFile.GetFileName();
}


char buffer[60000];

int fh;
long size;
unsigned int nbytes = 60000, bytesread;

/* Open file for input: */
if( (fh = _open( m_strDateiname, _O_RDONLY )) == -1 )
{
perror( "open failed on input file" );
exit( 1 );
}

/* Read in input: */
if( ( bytesread = _read( fh, buffer, nbytes ) )  perror( "Problem reading file" );
// else
//printf( "Read %u bytes from file\n", bytesread );

_close( fh );

//Ende der Datei abschneiden
buffer[bytesread] = '\0';

m_TextEinAusgabe = buffer;
UpdateData(false);

}
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten