Forum: Mikrocontroller und Digitale Elektronik zahlen aus string ermitteln


von tobias hofer (Gast)


Lesenswert?

Hallo

Ich habe folgenden commando string den ich auswerten möchte:

char command = "C1_3_15444_54231"

Die folgenden variablen sollten die folgenden werte enthalten:
char com[2] = C1
int val_1 = 3
int val_2 = 15444
int val_3 = 54321

Das ganze wollte ich mit sscanf machen. Leider unterstütz der compiler
(dsPIC HI-TECH) diesen Befehl nicht.

Was für andere möglichkeiten habe ich?

Besten Dank für euren input.

Gruss Tobias

von Rolf Magnus (Gast)


Lesenswert?

Wie sieht's mit strtok aus? Damit könntest du den String zunächst
unterteilen und mit atoi die drei letzten Teile in Integers
konvertieren.
Allerdings muß man daran denken, daß strtok den Orignalstring
verändert.

von Karl H. (kbuchegg)


Lesenswert?

Andere Möglichkeit:
Ich geh auch davon aus, dass du den Originalstring
verändern darfst. Und: Ich geh davon aus, dass die
Formatierung konstant ist.

char command[] = "C1_3_15444_54231"

  com[0] = command[0];
  com[1] = command[1];

  val1 = command[3] - '0'
  command[10] = '\0';
  val_2 = atoi( &command[5] );
  val_3 = atoi( command + 11 );


Bist du sicher, dass dein Compiler keinen sscanf hat.
Ist eigentlich ziemlich unüblich, denn wenn der Unterbau
da ist, ist ein sscanf eigentlich eine leichte Übung.

von tobias hofer (Gast)


Lesenswert?

Hallo

Ich bekomme auf jeden fall immer eine fehler meldung beim kompilieren.
die sscanf funktion habe ich aber vorher mit borland getested. die
sollte nicht fehlerhaft sein.

aber ich verusche das jetzt mal mit deinem vorschlag.

danke tobias

von Rolf Magnus (Gast)


Lesenswert?

> Ich bekomme auf jeden fall immer eine fehler meldung beim
> kompilieren.

Meinst du damit, daß der Compiler einfach nur "Fehler" ausgibt und
sonst gar nichts, oder hast du nur vergessen, den Inhalt der Meldung
ins Posting zu kopieren? Bedenke: Wenn du die Fehlermeldung nicht
verstehst, heißt das noch lange nicht, daß ihr Inhalt unbedeutend ist.
Es ist auch sinnvoll, den Code zu posten, der den Fehler produziert
hat.

von tobias hofer (Gast)


Lesenswert?

Hallo

Hier wie ich es testweise programmiert habe:

int val_1, val_2,line;
char com[3];
char command[] = "C1_3_12345_3322";

sscanf(command, "%2s_%d_%d_%d",com,&line,&val_1,&val_2 );

Hier die Fehlermeldung des dsPIC-HI-TECH compiler:

Error[500]  0 : undefined symbols:
  _putch
(C:\Programme\Microchip\HTSOFT\dsPICC_9.50\lib\dspicc-sc.lib:
cgets.obj)_getche
(C:\Programme\Microchip\HTSOFT\dsPICC_9.50\lib\dspicc-sc.lib:
cgets.obj)


Auf jeden Fall hatte ich schon einmal das problem das ansi standart
funktionen bei der aktuellen version des compiler gefehlt haben.
Da ich mit dieser Fehlermeldung nichts anfangen konnte, bin ich davon
ausgegangen das die funktoin sscanf noch nicht untestützt wird.

Gruss Tobias

von Karl H. (kbuchegg)


Lesenswert?

Das sind keine Fehlermeldungen vom Compiler sondern
die sind vom Linker.
Da fehlt eine Bibliothek oder HTSOFT hat tatsächlich irgendwelche
Funktionen nicht implementiert (kann ich mir aber nicht
vorstellen). Also: Doku lesen welche Bibliothek noch angegeben
werden muss.

von tobias hofer (Gast)


Lesenswert?

Habe in der Doku leider nichts gefunden. Werde mal mit
HTSOFT kontakt aufnehmen.

Gruss Tobias

von <°--->< (Gast)


Lesenswert?

.... wird denn überhaupt noch etwas dazugelinkt?

von der inoffizielle WM-Rahul (Gast)


Lesenswert?

Wennn der String konstant ist bzw. durch "_" getrennte Informationen
enthält, kann man sich daoch auch ziemlich einfach eine Funktion
basteln, die diese Informationen aus dem String gewinnt:
Man kann durch einfach Schleifen und char-Operationen eine
Filterfunktion erzeugen.
sscanf() bestimmt eine Menge, aber braucht man das in dem Fall
wirklich?

von tobias hofer (Gast)


Lesenswert?

Ich habe es nun so programmiert wie
Karl Heinz Buchegger beschrieben hat. Funktioniert sehr gut und
einfach.

von bussiBär (Gast)


Lesenswert?

wie wärs mit good old basic ?

left$   mid$   right$

oder kann das keiner von euch ?

von blan (Gast)


Lesenswert?

ich glaube diese "left$" "mid$" "right$" gibts in C nicht.

mfg blan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.