Problem mit Textdateien



  • Ich hab das jetzt geändert und bekomme nun beio fgets den Error C2660:
    function does not take 1 parameters.

    FILE * data;
    	data = fopen("c:\\test.txt", "r+");
    	char acTmp[255];
    	while (fgets(data))
    	{  
    
    		 //mach was mit der ausgelesenen Zeile  
    
    	}
    	fclose(data);
    

    Was läuft denn da falsch?



  • Du mußt schon alle Parameter für fgets() angeben 😉

    PS: Ein Vorschlag von mir: Verwende lieber fstreams anstelle der C Dateifunktionen.



  • Ja klar, das hatte ich ganz vergessen. Danke
    Aber wie übergebe ich nun die Zeilen an das Listenfeld?
    Ich hab für das Listenfeld auch schon eine Variable definiert m_cltLISTOUTPUT.
    Wie gesagt, ich bin da noch super neu drin und ich verstehe das gerade erst so langsam 🙂
    Und was hat das mit dem fstream aufsich?

    Vielen dank für die weitere Hilfe.


  • Mod

    Das einfachste ist:
    - Du erzeugst eine Dialog Anwednung mit dem Wizard.
    - Packst eine ListBox in den Dialog.
    - Fügst eine Memeber Variable für die Listbox
    - Packst den Code zum Lesen nach OnInitDialog
    - Fügst jede Zeile mit AddString in die Listbox.



  • Ich hab jetzt das jetzt alles eingerichtet und den Code nach meinem Verständniss aufgeschrieben.
    Er kompiliert auch ohne Probleme durch.
    Doch wenn ich die Option in meiner Menü-Leiste aufrufe bekomme ich den folgenden Fehler:

    Debug Assertion Failes
    file: fgets.c
    Line 60
    Espression : str != NULL

    Wenn ich Meldung dann ignoriere dann sagt das Programm mir:
    Memory could not be read.

    Hab ich im Code noch was falsch gemacht?

    FILE * data;
    	data = fopen("c:\\test.txt", "r+");
    	char acTmp[255];
    	while (fgets(acTmp,'\n',data))
    	{  
    
    		 m_ctlLISTOUTPUT.AddString("acTmp"); 
    
    	}
    	fclose(data);
    


  • 🙄 der fgets()-Aufruf in deinem ersten Beispiel war doch schon in Ordnung - warum bastelst du da noch an den Parametern herum?

    (und nebenbei wird dieser Code dir die Ausgabeliste mit "acTmp"-Einträgen füllen)



  • Hmm, okay. Dann nochmal.
    Ich hab das mit den Parametern wieder geändert und es sieht jetzt so aus:

    while (fgets(acTmp,255,data))
    	{  
    		m_ctlLISTOUTPUT.AddString("acTmp"); 
    	}
    

    Wenn ich die Parameter nicht so angebe, dann kommt da wieder der C2660 Error, wie oben.
    Ich dachte, dass in dem acTemp die einzelnen Zeilen zwischen gespeichert werden?!
    Oh man, langsam bin ich ein wenig verwirrt 😕
    Könntet ihr mir vieleicht mit einem Codeschnipsel auf die Sprünge helfen?



  • Erstmal solltest du die Anführungszeichen bei dem AddString()-Aufruf weglassen (wir sind hier nicht bei PHP).

    Zweitens: Ja, in acTemp landet die aktuelle Eingabezeile, die du auch auswerten kannst. Aber eventuell solltest du trotz allem eine Sicherheitsabfrage einbauen, ob die Datei korrekt geöffnet werden konnte.

    Drittens: Auch wenn ich mich widerhole - nimm lieber fstream's (oder CFile):

    ifstream data("...");
    string zeile;
    while(getline(data,zeile))
    {
      m_ctlLISTOUTPUT.AddString(zeile.c_str());
    }
    


  • Oder:

    // Grundidee **OHNE** jegliche Fehlerbehandlung
    CFile inFile("c:/test.txt", CFile::modeRead);
    CArchive archive(&inFile, CArchive::load, inFile.GetLength());
    CString line;
    while (archive.ReadString(line))
    {
        m_ctlLISTOUTPUT.AddString(line);
    }
    archive.Close();
    inFile.Close();
    


  • Also nochmals danke das ihr so viel Geduld mit mir habe 🙂
    Ich hab das ganze, wie in deinem Code nach ifstream umgestellt und muuste mich da eine Menge mit Libs herumschlagen, bis die alle korrekt eingebunden waren.
    Allerdings habe ich dann einen Fehler bekommen der sagt, dass er die MSVCP60D.dll nicht findet. Ich habe diese DLL auch in den Ordner meiner .exe gelegt aber er will die exe immer noch nicht ausführen.
    Ich hab dann mal von Debug auf Release umgestellt und dann funzt das.
    Das mit der Listbox etc. hab ich jetzt ja auch verstanden, aber irgendwie gibt er trotzdem nix aus 😞
    Der Pfad der Textdatei lautet:
    H:\My Databases\Trace Projekt\Debug und in dem Debugordner liegt dann die .txt.
    Hier nochmal mein Code

    ifstream data("h:\\\Test.txt"); 
    	string  zeile; 
    	while(getline(data,zeile)) 
    	{ 
    		m_ctlLISTOUTPUT.AddString(zeile.c_str()); 
    	}
    


  • Dann mußt du auch den kompletten Pfad angeben - du versuchst die Datei 'test.txt' im Stammverzeichnis von Laufwerk H: zu öffnen.
    (Alternativ kannst du auch einen relativen Pfad angeben - wenn du das "H:\" weglässt, sucht das Programm die Datei im aktuellen Arbeitsverzeichnis.)


  • Mod

    h:\\\Test.txt
    Wird zu
    h:\<tabctrl-Zeichen>est.txt



  • Ich werde da nochmal n bissel rumprobieren.
    Der Kompieler meckert da irgendwie, dass Addstring die Konvertierung des Parameters 1 von 'const char *' in 'LPCTSTR' nicht möglich macht.

    Vielen Dank für die Hilfe 👍


Anmelden zum Antworten