WinFuture-Forum.de: Strings, Streams Und Utf8 - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Strings, Streams Und Utf8


#1 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 21. August 2005 - 13:07

Ich versuche eine Datei einzulesen, mit den Daten etwas zu machen und anschließend wieder auszugeben. Das ganze soll auch mit UTF-8 kodierten Daten klappen, tut es aber nicht. Wo ist in dem folgenden Code der Fehler? Geht sowas mit Strings grundsätzlich nicht?

// Datei einlesen

ifstream file_input("einedatei.txt",ios::binary);
string line, file_contents;

if(file_input.bad())
{
   return false;
}
else
{
   do
      {
         getline(file_input,line);
         file_contents += (line + "\n");
      }
      while(file_input);
}
file_input.close();
	
	
// Datei ausgeben

stringstream out;

out << file_contents << "<- ein string der utf-8 daten enthalten sollte" << endl;


ofstream file_output;

file_output.open("eineanderedatei.txt",ios::binary);
if(file_output.bad())
{
   cout << "Error when trying to save the output file!" << endl;
   return;
}

while(out.good())
{
   getline(out,line);
   file_output << line << "\n";
}
file_output.close();


file_contents kommt übrigens nicht direkt in file_output weil unter Umständen auch eine andere Ausgabequelle benutzt wird.
0

Anzeige



#2 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 26. August 2005 - 23:32

Wenn du ein file das wirklich binary ist öffnest, dann hast du keine Strings darin und auch keine Steuerzeichen wie newline etc. daher funktioniert das was du da machen möchtest überhaupt nicht.

Bei Binary files musst du wissen wie die Struktur aufgebaut ist und kannst dann der Struktur nach die Bytes einlesen und zum Beispiel in Zeichen oder Integer etc umwandeln.

Aber da du von UTF-8 redest, gehe ich mal davon aus, dass du einfach Textdateien öffnen willst in denen evtl UTF-8 Zeichen enthalten sind, die du halt dann konvertieren musst
0

#3 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 27. August 2005 - 11:51

Nene, es funktioniert jetzt schon. Das Problem waren nicht die Strings, sondern die Funktionen isspace() und isdigit() welche mit UTF-8 nicht richtig funktionieren und mein Programm dazu gebracht haben Unfug zu machen. Habe mir entsprechende Ersatzfunktionen geschrieben und jetzt geht es.
0

#4 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 27. August 2005 - 22:22

Dann hast du aber kein Binary File und du solltest auch nicht ios::binary verwenden

Ich bin mir sicher, du hast ein stink normales file, dass du auch mit nem Texteditor öffnen kannst oder?
0

#5 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 28. August 2005 - 12:42

Ja, die Datei ist relativ stinknormal. Mit dem Texteditor öffnen geht aber dann nicht wenn du Notepad meinst. Mit anderen Teilen geht es. Gibt es denn einen Grund der dafür spricht nicht binary zu verwenden?
0

#6 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 28. August 2005 - 17:10

Okay dachte ich mir, denn wenns ein binary wäre, dann könntest du es mit keinem Editor öffnen und der Editor würde meckern und sagen ist ein Binray file, dann kännte man nur mit nem Hexeditor öffnen oder nem speziellen Editor der Binary unterstützt.

Solange du kein biary Format haben willst solltest du auch kein binary verwenden, gerade beim schreiben wäre es ziemlich doff, weil du dann keine Steuerzeichen mehr reinschreibst
0

#7 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 28. August 2005 - 18:34

Zitat ([U]nixchecker: 28.08.2005, 18:10)

Solange du kein biary Format haben willst solltest du auch kein binary verwenden, gerade beim schreiben  wäre es ziemlich doff, weil du dann keine Steuerzeichen mehr reinschreibst
<{POST_SNAPBACK}>


Ich wüsste nicht dass ich Steuerzeichen brauchte.
0

#8 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 28. August 2005 - 21:53

Was glaubst du woher z.B. getline weis, wo ne Zeile aufhört?
Jede normale Datei hat Steuerzeichen wie newline space etc.

Bei binären Dateien funktioniert z.B. Zeilenweises einlesen nicht, weil da keine Steuerzeichen für Zeilenenden usw drin sind in der Datei:-)
0

#9 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 29. August 2005 - 15:01

Wieso denn nicht? Wenn ich eine Datei, die Leerzeichen enthält, binär einlese, dann sind die doch nochher immer noch da. Ich sehe keinen Grund warum die verschwinden sollten. Ich benutze den Binär-kram deswegen, weil ich sicherstellen möchte, dass die Eingabe-Datei möglichst unverändert (was Zeichen angeht) wieder rauskommt.
0

#10 Mitglied ist offline   [U]nixchecker 

  • Gruppe: aktive Mitglieder
  • Beiträge: 347
  • Beigetreten: 17. Mai 05
  • Reputation: 0
  • Wohnort:Bayern
  • Interessen:Informatik, Linux, Rollerbladen, Bodybuilding, GungFu

geschrieben 29. August 2005 - 16:12

Zitat

Wieso denn nicht? Wenn ich eine Datei, die Leerzeichen enthält, binär einlese, dann sind die doch nochher immer noch da


Ja das ist korrekt.

Zitat

Ich benutze den Binär-kram deswegen, weil ich sicherstellen möchte, dass die Eingabe-Datei möglichst unverändert (was Zeichen angeht) wieder rauskommt.


Macht aber bei nicht binären Dateien keinen Sinn, da willst du ja, dass sie auf dem jeweiligen Betriebsystem konvertiert werden, denn sonnst passiert es dir wie Notpad, wenn du eine Unixconfigdatei öffnest und du nur eine lange Zeile siehst und es so aussieht als hätte die Datei keine Zeilenumbrüche.

Binäres Öffnen macht nur Sinn, wenn man Daten wie z.B. Bilder, eigene Strukturen etc hat, wo man nicht will, dass Steuerzeichen als Steuerzeichen interpretiert werden, weil es z.B. in dem File keine Steuerzeichen sind sondern zu den Daten gehören.

Hier Pitfalls C++ Kapitel 6.4:

http://www.google.de/url?sa=t&ct=res&cd=7&...76tLrWeiAKukfwO
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0