Was ist daran Falsch???
-
Hallo,
ich habe folgendes geschrieben um eine Datei zu öffnen :
int i=1; int k=1; char zeile[25]; char zeichen; ifstream file("c:\\\\\\3x3.txt",ios::in); // datei kann geöffnet werden if( file.good()) { //Dateizeiger an den anfang der Datei positionieren // 0L null bytes in richtung ende cur richtung anfang end richtung ende file.seekg(0L,ios::cur); for(int j=0; j<25;j++) //dateizeiger zurück zum anfang damit gelesen werden kann file.seekg(1L,ios::beg); // macht das fenster parameter auf m_döffnefensterdlg.DoModal(); // button deaktivieren m_buttonvariable.EnableWindow(FALSE); MessageBox("hallo"); while(!file.eof()) { //lieste ohne beachtung von \n (zeilen) weiter //get liest nur die einzelne zeile bis \n. file.getline(zeile,25); zeichen = file.get(); if(zeichen== 1) { zeichen = file.get(); for (k =3;k<7;k++) m_dparameterdlg.m_strknot1 = zeichen; } i++; } } //Datei kann nicht geöffnet werden else { MessageBox("Datei nicht gefunden"); }Er öffnet die Datei, sonst würde er ja nicht die MessageBox ausspucken.
Er soll aber weiter, das erste zeichen der zeilen vergleichen mit z.B. 1 vrgleichen, und dann gegebenen falls den rest der zeile ausgeben. Daran hakt es aber. wie mache ich das jetzt weiter, damit es eine gescheite ausgabe gibt ????
Danke
-
Hallo Helpless,
ertsens ist dein Thread wohl eher was für das Ansi-C++-Forum, oder?
Was hat denn das mit MFC zu tun?
Zweitens versteh ich manches an deinem Code nicht.for(int j=0; j<25;j++) //dateizeiger zurück zum anfang damit gelesen werden kann file.seekg(1L,ios::beg);Was hat das zu bedeuten? Du positionierst das ganze 25-mal an den Anfang und dann wars das. Wenn sich die Schleife auf alles beziehen soll was anschließend folgt, musst den Block entsprechend bilden:
for(int j=0; j<25;j++) { //dateizeiger zurück zum anfang damit gelesen werden kann file.seekg(1L,ios::beg); // macht das fenster parameter auf m_döffnefensterdlg.DoModal(); // button deaktivieren m_buttonvariable.EnableWindow(FALSE); MessageBox("hallo"); while(!file.eof()) { //lieste ohne beachtung von \n (zeilen) weiter //get liest nur die einzelne zeile bis \n. file.getline(zeile,25); zeichen = file.get(); if(zeichen== 1) { zeichen = file.get(); for (k =3;k<7;k++) m_dparameterdlg.m_strknot1 = zeichen; } i++; } }Nur mal so als Besipiel.
Dann die nächste Ungereimtheit:
Wieso wird dein Dialog zuerst erstellt und dann gefüllt? Du weißt schon, dass nur nach beenden des Dialogs die nächte Zeile von DeinDlg.DoModal() ausgeführt wird?Dann das:
if(zeichen== 1) { zeichen = file.get(); for (k =3;k<7;k++) m_dparameterdlg.m_strknot1 = zeichen; } i++;Was machst du hier?
Wieso wird i hochgezählt, wenn du doch gar nichts mit ihm anfängst? Und wieso wird in der for-Schleife dem Memmber m_strknot1 von deinem Dlg 4 mal das gleiche Zeichen zugiesen?
Reicht nicht einmal?
Also was du jetzt hast, gibt folgendes aus:Zeichen = 'c'; for(k=3;k<7;k++) m_strknot1 = zeichen; /*Ausgabe k=3: m_strKnot1 == 'c' k=4: m_strKnot1 == 'c' k=5: m_strKnot1 == 'c' k=6: m_strKnot1 == 'c' */Ist es das was du willst?
Also mir ist dein Code/Vorhaben echt unschlüssig?
Ich glaube du solltest mal genauer schreiben, was du eigentlich willst.Gruß,
Stalin
-
Hallo,
sorry, das ich anscheinet das falsche forum gewählt habe, prog mit vc++
ist c++.Dann nochmal sorry hab zwar, den code verändert habe aber anscheinet dennoch viel mist abgeschrieben.... hatte den code aus einem buch.
Daher habe ich hier auchnicht weiter darauf geachtet:for(int j=0; j<25;j++) //dateizeiger zurück zum anfang damit gelesen werden kann file.seekg(1L,ios::beg);hast eigentlich recht, einmal reicht.
mit dem erstellen und füllen hast du auch recht hab uich darauf geachtet... (schäm)
hab´s an das ende gestetz, nach den schleifen.if(zeichen== 1) { zeichen = file.get(); for (k =3;k<7;k++) m_dparameterdlg.m_strknot1 = zeichen; } i++;hier wollte ich die eingelesenen zeichen ausgeben.....
Also in der datei stehen daten die ich ausgelesen haben möchte und und weiter ausgeben möchte. die ausgabe soll aber auf zwei mal erfolgen, erst der erste teil der daten der in der datei stehen und später der rest....

-
Wie ist denn deine Datei aufgebaut? Gib mal ein Beispiel.
Und ich würde dir empfehlen, nicht nur weil wir hier im MFC-Forum sind, sondern wegen der einfachheit halber, mal die Klassen CFile und CStdioFile anzuschauen.
Links sind hier:CFile: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_MFC_CFile.asp
Und was meinst du zuerst der erste Teil und dann der zweite?
Wie sind die Teile begrentzt?
-
Der Inhalt der Datei sieht etwa so aus:
1 "\t" d89 "\t" d17
2 "\t" f17 "\t" f18
sie sind durch taps getrennt, und stehen ohne \t in Datei, hier nur zur veranschaulichung.mit ersten teil meine ich erst d89 und dann d17 die eins am anfang dient nur zur suche der richtigen zeile. erst wird getestet ob erste zahl der datei mit einer vorgegebenen übereinsstimmt erst dann soll er den rest der zeile lesen, sonst weiter suchen.
-
Hallo,
kann mir wenigstens einer den anfang geben, habe mitlerweile bestimmt fünf verschiedene arten um dies zu machen ausprobiert, aber keines hat funktioniert.
WEnn mir einer den anfang geben könnte, ging der rest vielleicht einfacher.....
-
Hallo mal wieder,
ich habe es jetzt so gemacht:
TCHAR str[50]; // dtei öffnen CFile datei( "k:\\\\...\\3x3.txt", CFile::modeRead ); // txt lesen datei.Read( str, sizeof( str ) ); //detei schliessen datei.Close(); // in eingabefeld inhalt von str schreiben for (int k = 0; k<8;k++) { m_dparameterdlg.m_strknot1 = str [k] ; } UpdateData( FALSE ); // Variablen ---> Feldereigentlich soll die for-schleife bewirken das das jedes zeichen in dem breich ausgelesen werden soll und aus gegeben wird. macht es aber nicht.
also die ausgabe soll dann länger wie ein zeichen sein.
kann mir jemand sagen was ich anders machen muss????
-
HELPLESS schrieb:
Hallo mal wieder,
ich habe es jetzt so gemacht:
TCHAR str[50]; // dtei öffnen CFile datei( "k:\\\\...\\3x3.txt", CFile::modeRead ); // txt lesen datei.Read( str, sizeof( str ) ); //detei schliessen datei.Close(); // in eingabefeld inhalt von str schreiben for (int k = 0; k<8;k++) { m_dparameterdlg.m_strknot1 = str [k] ; } UpdateData( FALSE ); // Variablen ---> Feldereigentlich soll die for-schleife bewirken das das jedes zeichen in dem breich ausgelesen werden soll und aus gegeben wird. macht es aber nicht.
also die ausgabe soll dann länger wie ein zeichen sein.
kann mir jemand sagen was ich anders machen muss????Also wie wäre es mal wenn du deine for-Schleife anschaust?
Ich würde es mal so machen:for (int k = 0; k<8;k++) { m_dparameterdlg.m_strknot1 += str [k] ; }Denn so wie du es hast, schreibt er immer nur ein zeichen über das andere drüber...

gruß,
Stalin
-
DANKE
DANKE
DANKEgenau das war es
und jetzt geht es vielen lieben dank