PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welches ASCII Zeichen am besten als Trennzeichen verwenden?


mf_2
2008-01-16, 00:08:01
Hallo,

ich habe in einem C Programm eine Variable mit mehreren Werten, die momentan durch eine Raute (#) getrennt werden. Leider sind diese Werte vom Benutzer einzugeben und es kann in seltenen Fällen vorkommen, dass jemand eine Raute eingibt, was zum Kollaps des Programms führen würde. Daher will ich wissen, welches (am besten der nicht darstellbaren) ASCII Zeichen sich als Trennzeichen eignet. Ich kenne mich in dieser Zeichenmenge nicht so aus, da kenne ich nur CR und LF (Codes 10 und 13 dezimal) und den Beepcode. Gibt es das vllt. sogar ein Zeichen, dass genau für diesen Zweck gedacht ist? Es soll halt wenn möglich nicht über die Tastatur eingebbar sein (wie z.B. der Beepcode).

Gruß,
mf_2

Neomi
2008-01-16, 01:05:23
Wenn es unbedingt Trennzeichen sein sollen, dann kannst du jedes beliebige Zeichen nehmen, solange du die Eingaben des Nutzers mit entsprechenden Escape-Sequenzen passend umwandelst. Alles andere kann nicht nur, sondern wird auch zu Fehlern führen. Ein Beispiel für Escape-Sequenzen: "String mit \"Anführungszeichen\"".

In deinem Fall (zumindest in dem, was du schilderst) scheinen mir Trennzeichen aber nicht nötig zu sein. Was spricht denn gegen eine Speicherung der einzelnen Variablen in einer dynamischen Datenstruktur, z.B. einer Liste?

malte.c
2008-01-16, 05:18:32
Daher will ich wissen, welches (am besten der nicht darstellbaren) ASCII Zeichen sich als Trennzeichen eignet.

Üblich ist \0, wobei Du dann den gesamten String mit \0\0 statt \0 terminieren kannst. Allerdings erfordert das natürlich passende Verarbeitungsroutinen. Du kannst zwar damit auch die Länge der Teilstrings über die normalen C-Funktionen bestimmen, aber die Gesamtlänge erfordert eigenen Code.

Shink
2008-01-16, 08:32:02
Jedes Zeichen lässt sich mittels ESC-Sequenz mit der Tastatur eingeben, oder seh ich das falsch?
Ansonsten: Mach was Neomi sagt...

ilPatrino
2008-01-16, 13:11:24
solange du durch filterung den benutzer nicht daran hindern kannst, solche zeichen eingeben zu können, wird das murx³.
außerdem empfehle ich dringend, das über strukturen zu lösen statt über formatierte strings. (dynamische) arrays sind um welten sauberer als trennzeichen. :uconf2:ich weiß, wovon ich rede, ich mußte vor einer weile eine meiner jugendsünden debuggen - letztendlich hab ich den teil neu geschrieben - ging schneller.

rotalever
2008-01-16, 16:32:58
Ich frage mich gerade, wozu man solche Strings verwenden kann? Höchstens um Variablen in einer Datei zu speichern, da gibt es aber auch Bibliotheken, die das besser können und Arbeit abnehmen.

Shink
2008-01-16, 16:37:21
Ach was... als echter C-Programmierer macht man so etwas doch, oder? :weg:

SCNR

PHuV
2008-01-16, 19:20:50
Üblich ist \0, wobei Du dann den gesamten String mit \0\0 statt \0 terminieren kannst. Allerdings erfordert das natürlich passende Verarbeitungsroutinen. Du kannst zwar damit auch die Länge der Teilstrings über die normalen C-Funktionen bestimmen, aber die Gesamtlänge erfordert eigenen Code.

Damit kann man auch sehr böse auf die Fresse fallen, besonders wenn gewisse Leseroutinen einen String erwarten, und der plötzlich mit \0 terminiert ist, gibt schöne Cores Speicherfehler.

Ich frage mich gerade, wozu man solche Strings verwenden kann? Höchstens um Variablen in einer Datei zu speichern, da gibt es aber auch Bibliotheken, die das besser können und Arbeit abnehmen.

Schau Dir CSV-Dateien an. Es gibt viele Programme, die mit flachen Flatdateien als Parameterdateien arbeiten, da sich immer den Vorteil haben, daß man sie edieren kann, und ganz schnell Daten erstellt werden können.

rotalever
2008-01-16, 19:32:57
Schau Dir CSV-Dateien an.
Stimmt, hatte ich nicht daran gedacht. Aber da gibt es jawohl auch Escapes.