Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Leerzeichen bei Dateien ignorieren

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 < [ 2 ]
000
26.06.2004, 21:50 Uhr
t10ottoo



Hi,

hoffe mal, dass das Thema hier richtig ist
Hab ne Menge ausprobiert, was ich hier so gefunden hab, aber ich komm einfach net drauf
Hier mal der Code:

C++:
    ifstream cDialogOptions;
    i3 = 0;
    
    cDialogOptions.open("dialogoptions.adv",ios::in);

    // ALLES EINLESEN
    if(cDialogOptions)
    { // if1
        while(!cDialogOptions.eof())
        { // while1
            cDialogOptions >> id_dialog_options[i3];
            cDialogOptions >> id_color[i3];
            getline(cDialogOptions,dialog_options_text[i3]);
            cDialogOptions >> id_dialog_option_start[i3];
            cDialogOptions >> active_nr3[i3];
            i3++;
        } // while1
    } // if1
    else
    { // else
    } // else

    cDialogOptions.close();



Diese Zeilen werden ausgeführt, wenn das Programm gestartet wird, aber es startet erst gar nicht, es kommt dann immer der bekannte XP_Fehler mit dem Fenster "Senden" und "Nicht senden", wird wohl jeder kennen
Im Debug-Modus konnte ich beobachten, dass er aus der Schleife nie rausgeht, also endlos ist...muss aber an dem "getline" irgendwie liegen, hab das wohl irgendwie falsch angewendet, wäre also nett, wenn mir einer sagen könnte, was daran falsch ist
"dialog_options_text" ist ein string.

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.06.2004, 21:54 Uhr
0xdeadbeef
Gott
(Operator)


Wie sind id_dialog_options, id_color, dialog_options_text, id_dialog_option_start und active_nr3 deklariert?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.06.2004, 22:15 Uhr
t10ottoo



int id_dialog_options[100];
int id_color[100];
string dialog_options_text[100];
int id_dialog_option_start[100];
int active_nr3[100];

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2004, 00:51 Uhr
0xdeadbeef
Gott
(Operator)


OK, meine erste Vermutung ist, dass beim einlesen der Datei was schiefgeht. Vielleicht ist noch ein newline im stream, so dass das getline die Zeile, die du willst, garnicht ausliest oder sowas. Versuch mal

C++:
while(cDialogOptions)


statt

C++:
while(!cDialogOptions.eof())


Das wird das Problem vielleicht auch nicht wirklich lösen, dürfte dir aber zeigen, worin es besteht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.06.2004, 10:57 Uhr
t10ottoo



Wenn ich das so mache, dann bringt er zwar kein Fehler mehr, aber er überspringt die getline-Zeile und durchläuft die Schleife nur einmal, obwohl in der Datei mehr drinne steht, also er müsste sie mehrmals durchlaufen. Ohne dem getline gehts ja, WENN dann keine Leerzeichen sind, aber mit Leerzeichen braucht man ja irgendwie das getline...bin schon halb am verzweifeln
Dieser Post wurde am 27.06.2004 um 11:06 Uhr von t10ottoo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.06.2004, 12:35 Uhr
t10ottoo



Hrmph, kann meinen Beitrag leider nimmer editieren, also:
Er überspringt ja doch net die getline-Zeile, er schreibt einfach nur nix in die Variable rein, und durchlaufen tut er aber nur ein einziges mal...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.06.2004, 17:09 Uhr
0xdeadbeef
Gott
(Operator)


Jepp, das macht sinn. Ich vermute, dass deine Datei in der Form

Text:

zahl zahl
eine zeile text
zahl zahl

zahl zahl
eine zeile text
zahl zahl


oder so ähnlich vorliegt. Das Problem, das du hast ist, dass

C++:
cDialogOptions >> id_color[i3];


zwar die Zahl aus dem Stream liest, nicht aber das darauf folgende newline-Zeichen. getline liest danach dann den Rest der Zeile, also das newline, und weist einen leeren String zu. Als nächstes steht dann die Zeile, die du eigentlich zuweisen wolltest, im Stream, aber du versuchst ne Zahl auszulesen. Damit wird der Stream ungültig und

C++:
while(cDialogOptions)


wird nicht mehr erfüllt, weil die Umwandlung zu bool false ergibt.

Ich kann dir allerdings nicht wirklich helfen, ohne das Format der Datei genauer zu kennen, wie ist die Datei aufgebaut?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.06.2004, 19:48 Uhr
t10ottoo



Also wenn ich ohne Leerzeichen die Datei mache und dann auch ohne getline, dann geht das ja, also sollte das newline-Zeichen mitgelesen werden. Der Aufbau der Datei ist folgendermaßen:

Code:
1
2
Hallo
4
1
2
3
Tschüß, bis dann
1
0



Ich hoffe, du kriegst das noch raus, weil ich echt nimmer weiterweiß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.06.2004, 19:58 Uhr
0xdeadbeef
Gott
(Operator)


Ich würds wahrscheinlich eh ganz anders aufbauen, aber wenn dus so machen willst:

C++:
while(cDialogOptions) {
            string rest_der_zeile;
            cDialogOptions >> id_dialog_options[i3];
            getline(cDialogOptions, rest_der_zeile);
            cDialogOptions >> id_color[i3];
            getline(cDialogOptions, rest_der_zeile);
            getline(cDialogOptions,dialog_options_text[i3]);
            cDialogOptions >> id_dialog_option_start[i3];
            getline(cDialogOptions, rest_der_zeile);
            cDialogOptions >> active_nr3[i3];
            getline(cDialogOptions, rest_der_zeile);
            i3++;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.06.2004, 20:12 Uhr
t10ottoo



Hey cool, es funktioniert Wow, du kannst dir gar nicht vorstellen, was mir für ein Stein vom Herzen fällt

Aber eine Frage hab ich noch:
Wieso funktioniert das dann auch so:

C++:
if(cDialogOptions)
    { // if1
        while(cDialogOptions)
        { // while1
            cDialogOptions >> id_dialog_options[i3];
            cDialogOptions >> id_color[i3];
            cDialogOptions >> dialog_options_text[i3];
            cDialogOptions >> id_dialog_option_start[i3];
            cDialogOptions >> active_nr3[i3];
            i3++;
        } // while1
    } // if1


WENN die Datei so aussieht:

Code:
1
2
Hallo
4
1
2
3
Tschüß
1
0


Also wenn das Problem mit den Leerzeichen nicht besteht, denn da liest er ja auch das "newline" ein, obwohl ich getline nicht verwende...


Code:
Ich würds wahrscheinlich eh ganz anders aufbauen,...


Wie denn, wenn ich fragen darf, vlt. änder ich es dann noch, wenns sich damit leichter arbeiten lässt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: