Tokens aus Datei lesen
-
Hallo,
ich habe ein Problem, ich will Tokens aus einer Datei lesen. Die Tokens werden durch < > gekennzeichnet (Vorgabe).
Beispiel:<who><ps -a>
Als erstes habe ich es mit
scanf("<%s>",&ziel);
probiert. scanf liest jedoch die ganze Zeile ein (man erhält also who><ps -a)
Dann bin ich über die Funktion strtok gestolpert, und habe es wie folgt versucht:
ptr = strtok(test, "<>");
Als Ergebnis bekomme ich jedoch leider folgende "Tokens":
who
<ps
-a>Dann habe ich noch versucht, '<' und '>' manuell aus dem eingelesenen String zu entfernen, jedoch bin ich da auch gescheitert, bzw. kann mir halt nicht vorstellen, dass man das nicht auch so hinbekommt.
Über Vorschläge und Ideen wäre ich sehr froh, danke (:
-
probier den:
#include <stdio.h> void print_tokens (char *s) { int state = 0; while (*s) { switch (state) { case 0: if (*s == '<') state = 1; break; case 1: if (*s == '>') { putchar ('\n'); state = 0; } else putchar (*s); break; } s++; } } void main (void) { char *file = "hello<ja>world<wie>that<cool>goes<ist>to<das?>hell"; print_tokens (file); }
-
Jo, danke schonmal, sowas ähnliches hatte ich auch schon mal (allerdings nicht so sauber ^^). Dann steh ich jedoch vor einem Problem, ich will das ganze nicht ausgeben, sondern den String zurück geben (respektive einen Zeiger auf eben diesen). Das Problem was ich dabei habe, ist einen String zu erstellen, von dem ich vorher noch nicht weiß, wie groß er ist. Bzw. dass hieße dann halt mir allocate arbeiten, was mir aber zu umständlich erscheint.
So ganz habe ich auch das mit den Strings noch nicht so raus in C, wenn du noch einen Vorschlag hättest, wie ich das machen kann, wäre ich glücklich (:
-
Nur eine Idee: %s verwendet Whitespaces als Trennzeichen, du willst, daß die Eingabestrings mit > beendet werden, da brauchst du eine andere Formatkennung:
scanf("<%[^>]>",ziel);
(btw, bei Strings mußt du nicht extra dereferenzieren ;)).
-
Danke! Das hatte ich auch gelesen, aber ich hatte es mit
(fscanf(fp, "%[<^>]",command))
probiert, was nur zum Fehler geführt hat! Hab ich wohl falsch gedacht. Wie du es angegeben hast klappt es wunderbar (:
Eine letzte Frage noch, gibt es auch eine Möglichkeit, das ganze sicher zu machen? Also wenn der gelesene String länger ist als das char-Array gibt's ja einen Segmentation fault. Wie kann man das verhindern/besser machen/oder wenigstens abfragen um eine gescheite Fehlermeldung auszugeben?
Schon mal vielen Dank für die ganze Hilfe