Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dateiarbeit

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
19.10.2004, 16:44 Uhr
~Schwabi
Gast


Hey ho,
hab da ein kleines Problem mit meinem Prog.
Möchte eine Datei auslesen und alle Umlaute ersetzen. Das funzt soweit auch ganz gut (zumindest das öffnen und lesen). Beim schreiben mag er aber nich so richtig.
Ich geb hier mal mein Code durch :


C++:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{

  int wahl;
  char c;
  ifstream input;
  ofstream output ("../../temp.txt");
  
  cout << "Programm zur Arbeit mit einer Datei" << endl;
  cout << "-----------------------------------\n" << endl;
  
  cout << "Start: 1" << endl;
  cout << "Exit : 2\n" << endl;
  
  cin  >> wahl;
    
      while ( (wahl < 1) || (wahl > 2) )
      {
          cout << "Falsche Eingabe" << endl;
        cin  >> wahl;
      }
  
    if (wahl == 1)                    // Dateiarbeit beginnen
    {
    
        input.open("../../Muster.txt");
        
            if ( input.fail() )
                cout << "Die Datei 'Muster.txt' konnte nicht geöffnet werden oder ist nicht vorhanden!" << endl;
                
            else
            {
                while( input.get(c) )
                {
                    switch (c)
                    {
                        case 'Ä':
                            output.put('A') ;
                            output.put('e') ;
                            break;
                        case 'ä':
                            output.put('a') ;
                            output.put('e') ;
                            break;
                        case 'Ü':
                            output.put('U') ;
                            output.put('e') ;
                            break;
                        case 'ü':
                            output.put('u') ;
                            output.put('e') ;
                            break;
                        case 'Ö':
                            output.put('O') ;
                            output.put('e') ;
                            break;
                        case 'ö':
                            output.put('o') ;
                            output.put('e') ;
                            break;
                        case 'ß':
                            output.put('s') ;
                            output.put('s') ;
                            break;
                        default:
                            output.put(c);
                            break;
                    }
                    
                }
                            
    
            }
    }
    
    if (wahl == 2)
        cout << "Ihre Wahl: 2" << endl;
  
  output.close() ;
  input.close() ;
  cout << endl;

  return EXIT_SUCCESS;
}




Wenn ich jetzt folgenden Text damit bearbeite:

Hier kommt jetzt ein Text mit vielen Umlauten wie ÄÄÄ
ää oder auch ÖÖÖ oder ööö

Kommt folgendes raus:

Hier kommt jetzt ein Text mit vielen Umlauten wie e e e
e e oder auch e e e oder e e e


Mir fällt grad auf, wenn ich den text hier rein kopiere kommt folgendes:

Hier kommt jetzt ein Text mit vielen Umlauten wie �e�e�e
�e�e oder auch �e�e�e oder �e�e�e

Dann schreibt er ja scheinbar doch irgendetwas drauf ??
Kann mir hier jemand weiter helfen??

Grüße Schwabi

Dieser Post wurde am 21.10.2004 um 20:20 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2004, 09:15 Uhr
typecast
aka loddab
(Operator)


Koenntest du mal die Datei die du einliest posten? Ich kann den Fehler naemlich nicht nachvollziehen. Bei mir funktioniert alles einwandfrei.
--
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
002
21.10.2004, 19:29 Uhr
~schwabi
Gast


Jo, der obige Quellcode hat sich noch nicht verändert.


Code:

Folgende Datei wird eingelesen:
(Datei "Muster.txt" in vi und kwrite geöffnet)
Hier kommt jetzt ein Text mit vielen Umlauten wie ÄÄÄ
ää oder auch ÖÖÖ oder ööö
üüü und ÜÜÜÜ
aber auch mit ßßßß
dann schaun wir mal was er macht...

Folgende Datei wird ausgegeben:
(Datei "temp.txt" in kwrite)
Hier kommt jetzt ein Text mit vielen Umlauten wie  e e e
e e oder auch  e e e oder  e e e
e e e und  e e e e
aber auch mit  s s s s
dann schaun wir mal was er macht...

(wenn ich die Datei "temp.txt" aus kwrite hier her kopier)
Hier kommt jetzt ein Text mit vielen Umlauten wie �e�e�e
�e�e oder auch �e�e�e oder �e�e�e
�e�e�e und �e�e�e�e
aber auch mit �s�s�s�s
dann schaun wir mal was er macht...

(Datei "temp.txt" im vi)
Hier kommt jetzt ein Text mit vielen Umlauten wie ÃAeÃAeÃAe
ÃaeÃae oder auch ÃOeÃOeÃOe oder ÃoeÃoeÃoe
ÃueÃueÃue und ÃUeÃUeÃUeÃUe
aber auch mit ÃssÃssÃssÃss
dann schaun wir mal was er macht...




Ich werde daraus nun leider überhaupt nicht schlau. Da ich das ganze unter Linux mache und ich absoluter Newbee bin.

Hat jemand ne Ahnung??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.10.2004, 20:52 Uhr
(un)wissender
Niveauwart


Nimm Windows, da geht alles.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.10.2004, 21:23 Uhr
~schwabi
Gast


Hab ich mir auch schon gedacht. Nur hier gehts weiter.
Hab den Code mal etwas umgeschrieben:


C++:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
  int wahl;
  char c;
  ifstream input;
  ofstream output ("temp.txt");
  
  cout << "Programm zur Arbeit mit einer Datei" << endl;
  cout << "-----------------------------------\n" << endl;
  
  cout << "Start: 1" << endl;
  cout << "Exit : 2" << endl;
  cout << "Bitte waehlen Sie: ";
  cin  >> wahl;
    
      while ( (wahl < 1) || (wahl > 2) )
      {
          cout << "Falsche Eingabe" << endl;
        cin  >> wahl;
      }
  
    if (wahl == 1)                    // Dateiarbeit beginnen
    {
    
        input.open("Muster.txt");
        
            if ( input.fail() )
                cout << "Die Datei 'Muster.txt' konnte nicht geoeffnet werden oder ist nicht vorhanden!" << endl;
                
            else
            {
                while( input.get(c) )
                {
                    
                    switch (c)
                    {
                        case '\216':
                            output.write("Ae", 2);
                            break;
                        
                        case '\204':
                            output.write("ae", 2);
                            break;
                        
                        case '\232':
                            output.write("Ue", 2);
                            break;
                        
                        case '\201':
                            output.write("ue", 2);
                            break;
                        
                        case '\231':
                            output.write("Oe", 2);
                            break;
                        
                        case '\224':
                            output.write("oe", 2);
                            break;
                        
                        case '\341':
                            output.write("ss", 2);
                            break;
                        
                        default:
                            output.put(c);
                            break;
                    }

                }    
            }
    output.close() ;
    input.close() ;

//danach is alles auskommentiert



Seltsamerweise ist bei Ihm das große Ä die Escape Sequenz \204 .
Alles andere nimmt er überhaupt nicht. Wenn ich die Escape Sequenzen in einem extra Programm ausgebe schreibt ers richtig.
I don't understand.

Dieser Post wurde am 21.10.2004 um 21:24 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.10.2004, 21:24 Uhr
~mike
Gast


Hi!
Ich weiß nicht ob das der Fehler ist - aber öüä stehen nicht im "normalen" ASCII Table. Ich glaube wchar_t ist da besser

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.10.2004, 21:25 Uhr
~schwabi
Gast


Wie jetzt wchar_t ?? Muss ich das irgendwo einbinden??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.10.2004, 21:39 Uhr
~schwabi
Gast


Ich hab mir jetz ma den ASCII Code der Zeichen aus der Textdatei ausgeben lassen.
Seltsamerweise sind alle Umlaute eine NEGATIVE ZAHL
Kann sich das noch jemand erklären?? Ich auf jeden nich mehr.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.10.2004, 22:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich versuch mal zu erklären auch auf die gefahr hin das mich ein standardgläubiger steinigt...
wenn du nur deklariest char.... dann ist das das gleich wie signed char... also vorzeichenbehaftet (ich weiss nicht ob das immer so ist oder der kompiler sich das aussucht aber in den meisten fällen scheint der immer signed zu nehmen wenn du es nicht expliziet angibst)...

so das heisst also der spass läuft von -128 bis 127 (unter der annahme das sizeof(char) gleich 1 Byte ist)....
und deine Umlaute liegen halten in dem bereich >127 was soviel heisst wie wenn das MSB negativ interpretiert wird hast du auch eine negative zahl
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.10.2004, 22:18 Uhr
(un)wissender
Niveauwart


char ist meistens signed, kann aber auch unsigned sein.
öä usw. sind im 8-Bit ASCII, nicht im 7. Ist toll nur kann kein verdammtes Programm das sauber anzeigen, was da ausgegeben wird, was weiß ich warum. Musste wohl erst nach UTF-8 umkodieren.
--
Wer früher stirbt ist länger tot.
 
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: