Processing - textdatei einlesen

hallo Experte,
Ich bin ein ziemlicher Anfänger in Processing, deswegen entschuldigt meine Primitive Frage.
Ich möchte nur mit Processing 1.5.1. eine Textdatei, die nur Zahlen enthält einlesen.
Dazu benutze ich loadBytes. Allerdings gibt das völlig falsche Zahlenwerte zurrück. Z.B. wird aus 1 -> 49. Was mache ich falsch? Hier ein Codeschnippsel:
byte lines[] = loadBytes(„liste.txt“);

Hallo wolle95,

ich habe bislang noch nicht mit Processing gearbeitet, allerdings ausgiebig mit dem verwandten Java. Daher denke ich, dass ich deine Frage beantworten kann.

Der Grund warum aus einer 1 eine 49 wird liegt darin, wie Daten im Computer gespeichert werden - alles wird in Form von Nullen und Einsen im Computer verarbeitet. Wie aus diesen 0en und 1en dann Buchstaben und Zahlen werden, legt eine Kodierung fest. In deinem Fall ist das ASCII (http://de.wikipedia.org/wiki/Ascii).

Darin wird festgelegt, welche Kombination aus 0en und 1en beispielsweise deine 1 ergeben. Das Zeichen 1 entspricht binär 0110001, was umgerechnet in dezimal 49 ergibt. Eine Tabelle der einzelnen Zeichen in ASCII findest du unter http://de.wikipedia.org/wiki/Ascii#ASCII-Tabelle
In der linken Spalte steht in Dezimaldarstellung die Entsprechung der 0en und 1en und ganz rechts das eigentliche Zeichen. Wenn du in der Tabelle die 49 dezimal suchst, wirst du als Zeichen die 1 finden.

Warum aber gibt dir der Befehl loadBytes nun 49 und nicht 1 aus?

Das liegt daran, dass der Befehl loadBytes explizit die nicht dekodierten Zeichen ausgibt. Dies ist beispielsweise dann sinnvoll, wenn man Daten eines Bilds lädt. Bei Text ist diese Ausgabeart aber normalerweise nicht gewünscht. Hierfür gibt es dann den Befehl
loadStrings()
(http://processing.org/reference/loadStrings_.html).

Dieser Befehl dekodiert die gespeicherten Zeichen und gibt diese wieder in Form von Text aus. Dann wird auch wieder die 1 als solche ausgegeben.

Solltest du ausschließlich mit Zahlen arbeiten, gibt es natürlich noch die Möglichkeit ganz auf die Kodierung zu verzichten. Dann würde eine 1 auch als 1 und nicht als 49 gespeichert. In diesem Fall ist man dann aber selbst dafür zuständig, wie die eingelesenen Daten zu interpretieren sind.

Wenn du deine Daten so speichern möchtest, dann darfst du dies natürlich auch nicht mit einem Texteditor tun, da dieser immer von Text und somit von einer Kodierung ausgeht. Solche Daten müssten dann auch mit saveBytes() (http://processing.org/reference/saveBytes_.html) gespeichert werden.

Sehr schöne Erklärungsvideos zu diesem und anderen Themen findest du (auf Englisch) verlinkt unter http://codeschool.org/core-units/

Hier insbesondere interessant dürften die Lektionen „numbers as bits“ (http://www.youtube.com/watch?v=i9yDIczflHY) und „bits and text“ (http://www.youtube.com/view_play_list?p=383CCF1CD831…) sein. Die Audioqualität ist leider nicht die beste, dafür stimmt aber der Inhalt!

Ich hoffe ich konnte dir mit meiner Antwort weiterhelfen - über eine kurze Rückmeldung würde ich mich freuen. Falls noch Fragen sind, stehe ich gern weiterhin zur Verfügung.

Viele Grüße

Benjamin

PS. Die ASCII-Kodierung ist sehr alt (aus IT-Sicht), daher trifft man immer häufiger eher auf Unicode (http://de.wikipedia.org/wiki/Unicode). Dies macht die Sache etwas komplizierter, aber eben auch universeller. So gibt es im ursprünglichen ASCII gerade mal 128 Zeichen und beispielsweise nicht so etwas wie „ä“ oder „ß“. Unicode hingegen enthält alles mögliche, unter anderem auch sämtliche chinesischen Schriftzeichen oder die ägyptische Hieroglyphen. ASCII und Unicode sind im Grunde die beiden Extreme. Dazwischen gibt es Unmengen an Kodierungen, sogenannten Zeichensätzen.