wiedermal sscanf
-
Abend,
komme trotz man usw. mit dem formatierten auslesen sscanf nicht weiter.
Ich lese zeilenweise meine Datei aus.z.b.
000001 ; S ; Das ist Meldung 1 ; 1 ; 2 ; 3 ; 4
danach möchte ich mit sscanf die Werte zwischen den ";" herauslesen
sscanf ( zeile , "%i5 %[^;]%s .... oder so ähnlich.
Ich habe wirklich gute Bücher....aber man kann immer einfaches auch kompliziert erklären.
Danke
worst_case
-
'%i5' will einen Integer gefolgt von einer '5' (und einem Leerzeichen uswusf) aus 'zeile' lesen. Feldbreitenangaben werden zwischen das % und das Spezifizierungssymbol i geschrieben. Direkt anschließend willst Du alles bis zum ';' lesen, aber leider ist nach dem Integer von oben und dem folgenden Leerzeichen das nächste Zeichen ein Semikolon; das ist nicht schlimm, aber überflüssig. Das nächste '%s' liest bis zum nächsten Freiraumzeichen... Vielleicht ist sscanf hier das falsche Mittel? Man könnte einige Zeiger auf die relevanten Stringpositionen zeigen lassen (entweder von Hand oder von strtok [jegen das ich eine Abneigung habe]).
-
Hallo,
so wie ich das verstanden habe könnte es so aussehen
z.b.
000001 ; S ; Das ist Meldung 1 ; 1 ; 2 ; 3 ; 4
sscanf ( zeile , "%[^;]%i %[^;]%s %[^;]%s %[^;]%i %[^;]%i", var1, usw)
Mit, oder ohne Leerzeichen ?
Danke
worst_case[ Dieser Beitrag wurde am 16.04.2003 um 17:15 Uhr von worst_case editiert. ]
-
Original erstellt von worst_case:
Mit, oder ohne Leerzeichen ?Ohne. »Mit, oder ohne Leerzeichen?«
Du musst eher »sscanf(data, "%[^;]; %d ; %[^;]; undsoweiterundsofort", a, b, c);« schreiben. Beachte die Semikola nach den '[^;]'.
'%d' zwingt scanf so lange Freiraumzeichen zu lesen, bis es entweder einen int oder 'etwas falsches' erkannt wurde. '%s' funktioniert genauso und stellt, sobald 'nach etwas wichtigem' wieder ein Freiraumzeichen auftritt seine Leseaktivität ein.
-
Hallo,
irgendwie funkt das bei mir nicht.
z.b.
000001 ; S ; Das ist Meldung 1 ; 1
sscanf ( zeile , "%[^;]; %d ; %[^;]; %s ; %[^;]; %s ; %[^;]; %i", &nummer1, zeichen , meldungstext, &nummer2)
sollte doch so gehen. tut's aber nicht und ich weiß nicht warum.
Danke
worst_case
-
Original erstellt von worst_case:
sscanf ( zeile , "%[^;]; %d ; %[^;]; %s ; %[^;]; %s ; %[^;]; %i", &nummer1, zeichen , meldungstext, &nummer2)'%[^;]' schreibt den Inhalt nach '&nummer1', '%d' nach 'zeichen' usw usf.
Ich weiß ja immer noch nicht, was Du eigentlich machen willst,; tut folgendes Programm etwa das, was deinen Erwartungen entspricht?
#include <stdio.h> int main(void) { int nummer1, nummer2; char zeichen, meldungstext[100]; sscanf("000001 ; S ; Das ist Meldung 1 ; 1", "%d ; %c ; %[^;]; %d", &nummer1, &zeichen, meldungstext, &nummer2); printf("%d\n%d\n%c\n%s\n", nummer1, nummer2, zeichen, meldungstext); return 0; }
-
Hallo,
da das doch ein Brief mit sieben Siegeln bleiben wird für mich, habe ich doch wieder strtok eingesetzt.
Danke
worst_case