Eine Textdatei in Edifeld ausgeben



  • Hallo zusammen,
    Ich würde gerne in eine text datei erstmal eine Liste von Strings speichern, die ich dann später vollständig in ein Editfeld ausgeben kann.

    Konkret:
    -Ein Dialogbasiertes Programm mit 3 Editfeldern.
    -In einem Editfeld gebe ich eine Anfangszahl(Ganze Zahlen, also "int"s) ein und in ein anderes Feld eine Endzahl.
    -Mit OnBnClicked() wird eine Datei zum lesen/schreiben geöffnet.
    -Die Zahlen werden vom Anfag bis Ende untereinander in die Datei geschrieben, wobei zu jeder Zahl noch die chars "am" angehängt werden, so dass die Ausgabe formatiert werden muss. Es sind also keine ints mehr sondern echte Strings.
    -Gleichzeitig wird ein Abbild diese Liste(Dateiinhalt) in ein dirttes großes Editfeld ausgegeben.

    Wahrscheinlich eine sehr einfache Kiste, aber ich hab vorallem nicht hinbekommen dass:
    a-Die Zahlen(Strings) untereinander in die Datei erscheinen.
    b-Der Dateiinhalt in meine Edifeld erscheint.

    Ps: ich arbeite mit CStdioFile, CString und CEdit

    Danke für eure Tipps



  • monem schrieb:

    a-Die Zahlen(Strings) untereinander in die Datei erscheinen.

    Ich nehme, dass pro Zeile ein Zahl samt "am" stehen soll.

    CStdioFile file; // Instanz Deiner Dateiklasse
    const int number = 42; // Deine Zahl
    CString lineOfText; // Die Textzeile in der Datei
    lineOfText.Format(_T("%dam\r\n"), number); // Textzeile formatieren
    file.WriteString(lineOfText.GetString()); // Text in Datei schreiben
    

    monem schrieb:

    b-Der Dateiinhalt in meine Edifeld erscheint.

    Wird hierzu die Datei vorher wieder eingelesen, falls nicht könntest Du doch einfach die in die geschriebenen Text der Datei auch ins CEdit schreiben/anhängen

    void MyClass::AppendTextToEdit(const CString & text)
    {
        CString oldText;
        edit.GetWindowText(oldText); // edit ist Member-Variable Deines CEdit
        oldText += text;
        edit.SetWindowText(oldText);
    }
    


  • Danke, das hat aber nur bedingt weiter geholfen. ich muss nämlich am Ende der Datei jedesmal überflüssige Zeichen (Datenmüll) per Hand löschen. Wie lassen diese sich vermeiden? Ich möchte einfach in der Datei eine Spalte von sagen wir 40 Strings haben( z.B. abcd-1, abcd-2, abcd-3, ...u.s.w) und zwar alles schön untereinander und ohne komische datenmüll am Ende. Danach alles in meine CEdit in meinem Dialogfenster als Liste darstellen lassen.



  • Ok, Ich habs jetzt. hier ist meine Lösung. Der Code läuft unter Vc++2010 einwandfrei.
    Aber eines habe ich noch nicht verstanden. Und zwar das mit GetString(). Sie scheint keine direkte Member von CString zu sein. Ein virtualmethod etwa? In MSDN habe ich nichts darüber gefunden. Die methode funktioniert mit VC++2010 aber nicht mit VC++6 (error C2039: 'GetString' : Ist kein Element von 'CString'). Hat jemand einen Tipp dazu? oder einen link wo man was darüber lesen kann wo die methode herkommt?

    PS: Sorry, ich weis nicht wie man Code hier einfügt

    void CAlpiDlg::OnAkt()
    {
    // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen

    CString str_ListOfAdapt;
    int nTempAdaptNr, i, j;
    UINT nLenght;
    m_strListe = ""

    UpdateData(TRUE); //
    UpdateData(FALSE); // Damit m_strListe nach jedem Klick aktualisiert wird
    nTempAdaptNr = m_nAdaptNr;

    m_TempFile.Open(_T("C:\\projekt\_temp.txt"), CStdioFile::modeCreate | CStdioFile::modeWrite);
    for(i = 0; i < m_nAnzahl; i++)
    {
    str_ListOfAdapt.Format(_T("%dAM\r\n"), nTempAdaptNr);
    m_TempFile.WriteString(str_ListOfAdapt.Get);
    nTempAdaptNr++;
    }
    m_TempFile.Close();

    //Datei zum Lesen wieder öffnen.
    m_TempFile.Open(_T("C:\\projekt\_temp.txt"), CStdioFile::modeRead);

    char Buffer[10000];
    for(j = 0; j<10000; j++)
    {
    Buffer[j] = 0;
    }
    nLenght = m_TempFile.GetLength();
    m_TempFile.Read(Buffer, (nLenght+1));
    m_strListe = Buffer ;
    UpdateData(FALSE);
    m_TempFile.Close();

    }


Anmelden zum Antworten