Liste in ein Logfile schreiben



  • Hallo,

    in meinem Programm werden jede Runde Zahlen in eine Liste geschrieben und gleichzeitig auch in ein Logfile(eine txt Datei). Jetzt will ich das aber umändern, das erst am Ende des Spiels alle Zahlen in das Logfile geschrieben werden. Gibt es eine Möglichkeit die Liste, so wie sie dem Benutzer angezeigt wird, in dieses Logfile reinzukopieren oder reinzuschreiben?

    Wenn das Spiel beendet ist wird dem Benutzer das Ergebnis angezeigt und er kann entscheiden ob er ein Logfile schreiben möchte. Diese Ausgabe ist kein eigener Dialog sonder nur eine Messagebox. In dieser werden die beiden Knöpfe OK und Abbrechen angezeigt. Wie kann man diese Knöpfe umbenennen?

    Thomas



  • Ja, gibt sogar mehrere Möglichkeiten.

    Fenster nennt man per WM_SETTEXT oder in der MFC mit CWnd::SetWindowText um.

    Bye, TGGC \-/



  • Die Umbenennung der Knöpfe habe ich hinbekommen. Könnte mir vielleicht noch jemand bitte sagen was es für Möglichkeiten gibr die Liste zu kopieren?



  • Mhh,
    du holst dir einfach den länge der gesamten liste und gehts das denn in einer schleife durch.

    pack das einfach in eine funktion und ruf diese auf, wenn die antwort der msg box dementsprechend ist...



  • So schreibst du alles was in einen CListCtrl steht in eine Textdatei:

    CStdioFile file;
    file.Open(pfad,CFile::modeCreate|CFile::modeWrite);
    for(int i =0;i < liste.GetItemCount();i++)
    {
     CString line="";
     for(int j =0;j < liste.GetHeaderCtrl()->GetItemCount();j++)
     {
      line += liste.GetItemText(i,j) + "|";
     }
     file.WriteString(line);
    }
    file.Close();
    


  • Es funktioniert, vielen Dank für die Hilfe.

    Thomas



  • Hallo !

    Nach der Lösung einiger andere Probleme und Bugs in meinem Programm bin ich nun wieder bei dem Logfile angelangt.
    Die Ausgabe funktioniert ohne Probleme, nur muss ich sie noch richtig formatieren. Meine Liste besteht aus 5 Spalten, von denen ich bei 4 vorher schon die maximal Breite festlegen kann. Bei der 5 Spalte ist dies aber nicht möglich, da dort immer unterschiedlich viele Elemente eingetragen werden. Die Anzahl der Elemente die dort eingetragen werden, habe ich schon herausgefunden, und kann nun zumindest grob schätzen wie breit die Tabelle im Logfile sein muss.
    Was mir jetzt allerdings fehlt ist die Möglichkeit genau diese Breite vorher festzulegen, damit bei der Ausgabe der Liste in dem Logfile die Trennstriche( | ) alle untereinander sind?
    Ich habe mir in der MSDN schon das AppenFormat für Strings angeschaut, komme da aber nicht weiter und weiß auch nicht ob ich da überhaupt richtig bin.
    Könnt ihr mir da weiterhelfen?

    Thomas



  • CStdioFile file;
    file.Open(pfad,CFile::modeCreate|CFile::modeWrite);
    CUIntArray spalte_zeichen;
    spalte_zeichen.Add(4);
    spalte_zeichen.Add(5);
    for(int i =0;i < liste.GetItemCount();i++)
    {
     CString line="";
     for(int j =0;j < liste.GetHeaderCtrl()->GetItemCount();j++)
     {
      CString text = liste.GetItemText(i,j);
      while(text.GetLenght() < spalte_zeichen[j])
      {
       text += " ";
      }
      line +=  text + "|";
     }
     file.WriteString(line);
    }
    file.Close();
    

Anmelden zum Antworten