Datei auslesen und im Fenster untereinander ausgeben

thos

Grünschnabel
Hallo,
wer kann mir bei meinem Progy weiterhelfen?
Hab eine Datei mit 6000 Datensätzen, die will ich auslesen, und in einen Windowsfenster untereinander ausgeben. Es soll so funktionieren, wie wenn man in ein neues File schreibt, welches mit append arbeitet, also die Datei nicht von neuem einliest.
so hier mein Progy:

Code:
 public:
  fenster(TWindow *parent):TWindow(parent,0,0)
    {
      Attr.X = 200;
      Attr.Y = 0;
      Attr.W = 400;
      Attr.H = 300;
      Attr.Style &= ~WS_THICKFRAME & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_CAPTION;
      Attr.Style |= WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | WS_VSCROLL;
      Scroller = new TScroller(this, XUnits, YUnits, XRange, YRange);
      
      int y=10;
      ifstream ein;
      ein.open("testtext.txt");
      while(ein.getline(xyz, 10, '\n'))
      {
      m_Text = new TStatic(this, 100, xyz, 10, y++, 362, 18, 362);
      m_Text -> Attr.Style &= ~SS_RIGHT;
      m_Text -> Attr.Style |= SS_LEFT | WS_BORDER;
      }
     }
};

Momentan gibt es leider nur den 1.Datensatz aus und nicht alle :(

thx toshi
 
Da ich mich mit der von dir verwendeten API nicht auskenne, spreche ich mal ganz allgemein: Zunächst solltest du prüfen, welchen Wert getline() zurückgibt und wie oft die Schleife durchlaufen wird. Mach eine ordentliche Debug-Session und kontrollier alle Werte. Dann müsstest du dem Problem relativ schnell auf die Spur kommen.

Gawayn
 
Die Schleife wird ja nur einmal durchlaufen und die 1. zeile wiedergegeben, es soll nicht immer ein new TSTatic aufgerufen werden, hab mich vielleich ein wenig dumm ausgedrueckt.
Es soll mit einem
Code:
m_Text = new TStatic(this, 100, xyz, 10, y++, 362, 18, 362);
, alle Datensätze ausgegeben werden.
 
hi thos

mit

while(ein.getline(xyz, 10, '\n'))

ließt du ja nur eine zeile in xyz ein... weil du ja bis \n gehst...

und wenn du dann

m_Text = new TStatic(this, 100, xyz, 10, y++, 362, 18, 362);

ausführst, und du sagst das es nur einmal aufgerufen wird, dann ist es doch klar das er nur den 1. datensatz ausgibt, da du ja xyz ausgibst.... und dort steht ja aus der getline funktion nur die 1. zeile drin, da du ja nur bis \n ausliest.

wenn du alles haben willst, musst du mit geline nicht nur die 1. zeile, sondern bis EOF (end of file) auslesen. ich meine sogar das du einfach EOF sagen kannst, also .....z.b. while (read.... == EOF)
und so den teil in dein xyz schreiben kannst... dann haste den kompletten satz in dem xyz...
 
werd ich gleich mal testen:eek:
wird mir da der Inhalt ganauso ausgegeben wie ich es in meinem Testfile vereinbart habe?
1.Zeile
2.Zeile
usw.
 
also versuchs grad mit dem eof, doch irgendwie klappt das nicht so, hier mein Quellcode:
Code:
ifstream ein;
ein.open("testtext.txt");
while(read(ein, xyz, 255))


und da kommt Fehler, can not convert ifstream to int,

mist, vielleicht gehts auch einfacher mit dem read und eof, aber ich hab noch nicht so die richtige Ahnung, mit Dateien.

@darkarchon: vielleicht koenntest du ja mal den Quellcode posten, wie du es machen wuerdest.

thx
 
In deinem Code testest du gar nicht auf EOF, also kann es nicht funktionieren. Ob es überhaupt so funktioniert, hängt von der read()-Methode ab: Damit man mit der Konstanten EOF arbeiten kann, muss read() beim Erreichen des Dateiendes EOF zurückliefern. Ob sie das tut, weiß ich nicht, das weißt nur du! Wenn read() am Ende der Datei EOF zurückgibt, sähe der Code so aus:
Code:
while( read(...) != EOF )
{
  ...
}
Gawayn
 
genau @Gawayn

dachte eigendlich das hatte ich geschrieben... aber sehe gerade habe statt != ein == geschrieben, aber Gawayn hat natürlich recht, es muss != sein...

aber so sollte es gehen das du zeilenweise die datei auslesen und dann verarbeiten kannst...

viel spassssssss :-)
 
Zurück