Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dateihandling

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
04.03.2005, 12:21 Uhr
~Gast
Gast


Hi,
ich versuche grade einen kleine Dateiumwandlung vorzunehmen. Immer wo ein & steht, soll später ein &amp; stehen. Folgendes habe ich mir dazu ausgedacht:

C++:
ifstream infile ("test.txt");

if(!infile.eof())
{
  char zeichen;
  ofstream outfile("neu.txt");
  while(infile.good())
  {
   zeichen = infile.get();
   if(zeichen == '&')
   {
    string output = "&amp;";
    outfile << output;
   }
   else
   {
    outfile << zeichen;
   }
  }
  //Datei schließen
  infile.close();
  outfile.close();
}
else
{
     MessageBox(NULL,"Datei konnte nicht geöffnet werden","Fehler",MB_OK);
}



Meine Test.txt sieht folgendermaßen aus:

Code:
Hallo&asdf

asdf


d

&

tata&tata



und in der neu.txt erscheint:

Code:
Hallo&ampasdf

asdf


d

&amp

tata&amptataÿ



Kann mir jemand sagen wieso am Ende immer ein ÿ erscheint? Habe es auch schon mit if(infile.good()) ausprobiert. Geht aber auch nicht.

Freue mich über jede Antwort.

Mfg
Tim
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.03.2005, 13:43 Uhr
RedEagle



Versuch mal aus

C++:
while(infile.good())


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

zu machen.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.03.2005, 14:54 Uhr
typecast
aka loddab
(Operator)


Ne, daran liegt es nicht. Es handelt sich bei dem Fehler um genau das gleiche Problem wie hier

Das eof-bit wird erst dann gesetzt, wenn versucht wurde ueber das Ende der Datei zu hinauszulesen.
Wenn der Dateizeiger auf dem Ende der Datei steht, dann liefert infile.eof() false zurueck.
Also wird noch versucht ein weiteres Zeichen aus der Datei zu lesen.

Das schlaegt fehl und zeichen enthaelt diesen komischen Buchstaben.

Dieser wird dann in die Datei geschrieben. Um das zu verhindern, sollte vor beiden Schreibanweisungen ueberprueft werden, ob die Leseoperation erfolgreich war.

Man koennte das z.B. so machen:


C++:
   if(zeichen == '&' && infile.good())
   {
    string output = "&amp;";
    outfile << output;
   }
   else
   {
    if (infile.good())
        outfile << zeichen;
   }


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2005, 22:40 Uhr
~der tim
Gast


danke

werde es mal ausprobieren

mfg
der tim
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.03.2005, 23:02 Uhr
enno-tyrant
Frag nicht!


oder einfach:

C++:
  while(!infile.eof())
  {
       if (infile.eof()){break;};
       zeichen = infile.get();
       if(zeichen == '&')
       {
            string output = "&amp;";
            outfile << output;
       }
       else
       {
            outfile << zeichen;
       }
  }


--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.03.2005, 14:11 Uhr
Oliver
S2-Pixelgeneral



Zitat von enno-tyrant:
oder einfach:

C++:
  while(!infile.eof())
  {
       if (infile.eof()){break;};
       zeichen = infile.get();
       if(zeichen == '&')
       {
            string output = "&";
            outfile << output;
       }
       else
       {
            outfile << zeichen;
       }
  }





Da bleibt das Problem aber .


Alternativ könntest du z.B. auch die Länge der Datei bestimmen und dann den überprüfen, wohin der Dateizeiger bei jedem Lesevorgang zeigt.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: