Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » In Log-datei maximal 10 Einträge bereithalten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.08.2003, 10:13 Uhr
~mutu
Gast


hallo!

in einer textdatei sollen immer nur max. 10 zeilen zu sehen sein.
dazu soll bei jedem schreiben einer neuen zeile (logging) geprüft werden, ob grenze erreicht ist. wenn überschritten, dann auf 10 zeilen kürzen.
optimal währe, wenn die zuletzt geschriebene zeile immer ganz oben währe (chronologisch).
idee?

Bsp. Inhalt Datei:

Datum Text
19.08.2003 Info...
18.08.2003 Info..
10.08.2003 Info....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.08.2003, 11:55 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Meinst du sowas in der Richtung?

C++:
#include <vector>
#include <algorithm>

using namespace std;
//...
CStdioFile Inputfile, Outputfile;
CFileException FileExc;
UINT nOpenFlags;
CString s;
nOpenFlags = CFile::modeRead;
if (!Inputfile.Open("C:\\test.txt", nOpenFlags, &FileExc)) {
   FileExc.ReportError();
   return;
}
    
vector<CString> li;
while (Inputfile.ReadString(s)) {
   li.push_back(s);
}
Inputfile.Close();
  
sort(li.begin(), li.end());


nOpenFlags = CFile::modeWrite | CFile::modeCreate;
if (!Outputfile.Open("C:\\Output.txt", nOpenFlags, &FileExc)) {
   FileExc.ReportError();
   return;
}
for(unsigned i = 0; i < li.size(); i++) {
    Outputfile.WriteString((LPCTSTR)li[i]);
   if(i == 9)
      break;
}
Outputfile.Close();



mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.08.2003, 12:42 Uhr
virtual
Sexiest Bit alive
(Operator)


@mike:
Ist das icht viel zu umständlich? - Ich meine: Die Datei ist doch bereits sortiert. Dann könnte man doch auch sowas machen (jetzt mal ohne den ganzen MFC Krempel):

C++:
#include <fstream>
#include <list>
#include <string>

static const char* LogFileName = "log.txt";
void add(
    const std::string& entry)
{
    std::list<std::string> log;
    log.push_back(entry);
    
    std::ifstream infile(LogFileName);
    while(file)
    {
        std::string line;
        std::geline(infile, line);
        log.push_back(line);
    }
    infile.close();

    std::list<std::string>::const_iterator i = log.begin();
    std::ofstream outfile(LogFileName);
    for(int j=0; j<10 && i!=log.end(); ++i, ++j)
         outfile<<(*i)<<std::endl;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.08.2003, 13:05 Uhr
~mutu
Gast


eher so vielleicht?

strLogTxt = "New LogInfo xyz";

strLines = strLogTxt; //Letzte Info immer oben anfügen

file.open(filepath, ios::in | ios::nocreate);
if(file.is_open() )
{
while(!file.eof())//alte Zeilen einlesen
{
Zeile++;
if(Zeile == 10)
{//max. 10 Zeilen anfügen
break;
}
file.getline(achBuffer, BUFFER/*512*/);
//ignore Headline
if(Zeile < 2)
{
continue;
}
strLines += '\n';
strLines += achBuffer; //Inhalte anfügen
}
file.close();
}

if( file = fopen( filepath, "w"/*neue Datei*/) )
{
fputs( strLines, file );
fclose( file );
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.08.2003, 13:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Wieso willst du denn die erste Zeile ignorieren? - Ich dachte die lketzte und damit älteste zeile soll verschwinden??
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.08.2003, 13:50 Uhr
~mutu
Gast


sorry, die erste zeile ist in der logdatei eine überschrift:

Datum Text

dann muß die erste zeile also ign. werden, da sie sonst immer für die neue datei im string mitaufgelistet würde.

strLogText = "Datum Text\n";//Überschrift in der neuen Datei
strLogTxt += "New LogInfo xyz"; //Text der 2.zeile = Log-Info

strLines = strLogTxt; //Letzte Info immer oben anfügen

...
while(..)
{
//wenn 1.Zeile, dann ist das die Überschrift in der log-datei==>continue;
//ansonsten:
strLines += ...alte zeile_n; //zeilen der alten log-infos anhängen
...
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: