Datei auslesen und ausgeben

  • C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datei auslesen und ausgeben

    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(<schon geschafft) und dann den Inhalt dieser Datei in ein Editcontrolfenster ausgeben.

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

    1. void CMenuesundTextverarbeitungDlg::OnDateiOeffnen()
    2. {
    3. CFileDialog ldFile(true);
    4. // Dialogfeld File Open zeigen und Ergebnis auffangen
    5. if(ldFile.DoModal() == IDOK)
    6. {
    7. // Gewählten Dateinamen ermitteln
    8. m_strDateiname = ldFile.GetFileName();
    9. }
    10. FILE *fp;
    11. int x;
    12. UpdateData(true);
    13. CStringArray Apuffer;
    14. CString puffer;
    15. for(x=0;;x++)
    16. {
    17. if(feof(fp)) break;
    18. fscanf(fp,"%s ",puffer);
    19. //m_TextEinAusgabe =m_PufferTEA + m_puffer;
    20. Apuffer[x] =puffer;
    21. UpdateData(false);
    22. }
    23. UpdateData(false);
    24. fclose(fp);
    25. }
    Alles anzeigen


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

    1. ifstream file(dateiname);
    2. std::string buffer;
    3. while(!file.eof()) // durchläuft alle zeilen bis ende
    4. getline(file, buffer);
    5. cout << buffer << endl;
    6. }
    7. 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-Quellcode

    1. for(x=0;;x++)
    2. {
    3. if(feof(fp)) break;
    4. fscanf(fp,"%s ",puffer);
    5. //m_TextEinAusgabe += puffer;
    6. UpdateData(false);
    7. }


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

    MFG Tik0
  • 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-Quellcode

    1. void CMenuesundTextverarbeitungDlg::OnDateiOeffnen()
    2. {
    3. CFileDialog ldFile(true);
    4. // Dialogfeld File Open zeigen und Ergebnis auffangen
    5. if(ldFile.DoModal() == IDOK)
    6. {
    7. // Gewählten Dateinamen ermitteln
    8. m_strDateiname = ldFile.GetFileName();
    9. }
    10. char buffer[60000];
    11. int fh;
    12. long size;
    13. unsigned int nbytes = 60000, bytesread;
    14. /* Open file for input: */
    15. if( (fh = _open( m_strDateiname, _O_RDONLY )) == -1 )
    16. {
    17. perror( "open failed on input file" );
    18. exit( 1 );
    19. }
    20. /* Read in input: */
    21. if( ( bytesread = _read( fh, buffer, nbytes ) ) <= 0 )
    22. perror( "Problem reading file" );
    23. // else
    24. //printf( "Read %u bytes from file\n", bytesread );
    25. _close( fh );
    26. //Ende der Datei abschneiden
    27. buffer[bytesread] = '\0';
    28. m_TextEinAusgabe = buffer;
    29. UpdateData(false);
    30. }
    Alles anzeigen