Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei
-
Hi(gh)!
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
scanf("%s", station);
du schreibst ins Nirvana.Wieso? station ist ein char-Array, also gleichzeitig Zeiger auf char!
Was verstehst du unter einer Binärdatei?
Eine Datei, in der z. B. eine int-Zahl nicht 10 oder sogar 11 Byte wie in Textdarstellung, sondern nur 4 Byte beansprucht
Die wird jedenfalls mit read/write verarbeitet und nicht mit fscanf/fprintf. Sie ist dann auch nicht „lesbar“.
Aha... muss ich mir mal näher ansehen!
Umlaute bestehen aus 2 Byte, wenn der Text als UTF-8 verarbeitet wird. Wähle ISO-8859-15 als deutschen Single Byte Zeichensatz. Was du dazu konkret tun musst hängt von Betriebssystem/Compiler/IDE ab.
Ich weiß im Moment auch noch nicht, ob ich diese Möglichkeit wirklich brauche, eventuell stören die 2 Byte gar nicht weiter...
Bis bald im Khyberspace!
Yadgar
-
@yadgar sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
scanf("%s", station); du schreibst ins Nirvana.
Wieso? station ist ein char-Array, also gleichzeitig Zeiger auf char!
char* station;
Da ist von einem Array nichts zu sehen.Eine Datei, in der z. B. eine int-Zahl nicht 10 oder sogar 11 Byte wie in Textdarstellung, sondern nur 4 Byte beansprucht
-2.300000 usw. sieht jetzt aber nicht danach aus.
-
Hi(gh)!
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
-2.300000 usw. sieht jetzt aber nicht danach aus.
Das mit int war nur ein allgemeines Beispiel, bei float fällt der Unterschied zwischen Text und binär nicht so stark ins Gewicht... ich habe bis jetzt noch nicht die Lesefunktion programmiert und weiß von daher nicht, wie die gelesenen Daten dann dargestellt werden... aber mir kommt die binäre Lösung irgendwie eleganter vor!
Und dann ist da ja noch das Problem mit den Rundungsfehlern: wenn z. B. aus 60.1 erst 60.099998 und beim Zurücklesen dann 60.0 wird wäre das nicht so schön... sofern ich an der Textdarstellung festhalte (die ist ja auch nachträglich leichter zu bearbeiten): wie bekomme ich es denn hin, dass die Werte tatsächlich nur mit einer Nachkommastelle in die Datei eingetragen werden?
Das Problem mit den deutschen Sonderzeichen hat sich vorerst als kein Problem herausgestellt: auch "Köln" wird korrekt eingetragen und nicht etwa zu köln. oder köl verstümmelt!
Bis bald im Khyberspace!
Yadgar
-
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
char* station;
Da ist von einem Array nichts zu sehen.Der eingegebene String wird aber trotzdem korrekt in die Datei geschrieben!
-
@yadgar sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
bei float fällt der Unterschied zwischen Text und binär nicht so stark ins Gewicht.
Äh, nein! "-2.300000" sind 9 Byte als Text, aber 4 als binäres float. Und selbstverständlich ist ist eine binäres float nicht "lesbar"!
-
@yadgar sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
char* station;
Da ist von einem Array nichts zu sehen.Der eingegebene String wird aber trotzdem korrekt in die Datei geschrieben!
Dann hast du Pech, denn dein Programm ist fehlerhaft und kann jederzeit abstürzen.
-
@manni66 sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
Dann hast du Pech, denn dein Programm ist fehlerhaft und kann jederzeit abstürzen.
Ich habe die Eingabe im switch-Zweig "1" durch die Routine in Zweig "2" ersetzt... jetzt sollte es problemlos laufen!
-
Hi(gh)!
Bevor ich mich gleich ins Reich der Träume verabschiede: ich habe die Schreib-Funktion, write() auf binäres Schreiben mit fwrite() umgestellt - und es scheint zu funktionieren! Jedenfalls wird es anstandslos kompiliert und Laufzeitfehler habe ich auch keine... heute Mittag werde ich die dazu passende Lesefunktion ergänzen, dann werde ich sehen, ob meine neue Version etwas taugt! Jetzt könnte ich allerdings auch wieder das Problem mit den Sonderzeichen bekommen, denn fwrite() geht ja von einheitlicher Zeichengröße aus...
Ganz dumm gefragt: gibt es g_utf8_strlen() auch für C, und wenn ja, in welcher Bibliothek finde ich es?
Bis bald im Khyberspace!
Yadgar
-
@yadgar sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
Ganz dumm gefragt: gibt es g_utf8_strlen() auch für C, und wenn ja, in welcher Bibliothek finde ich es?
Im C Standard nicht. Hier zum Beispiel.
Aber das brauchst Du nicht.
read()
undwrite()
lesen und schreiben eine gegebene Anzahl an Bytes und kümmern sich nicht um den Inhalt.Quizfrage @Yadgar: Welchen Wert liefert
g_utf8_strlen()
für"äüöß"
?
-
@swordfish sagte in Zwei neue Programmierprobleme: Behandlung von deutschen Sonderzeichen und Binärdatei:
Quizfrage @Yadgar: Welchen Wert liefert
g_utf8_strlen()
für"äüöß"
?Wenn du so fragst: 4! Wäre es 8, hätte man es auch gleich bleiben lassen können...