mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zahlen aus string ermitteln


Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe in der Doku leider nichts gefunden. Werde mal mit
HTSOFT kontakt aufnehmen.

Gruss Tobias

Autor: <°--->< (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.... wird denn überhaupt noch etwas dazugelinkt?

Autor: der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: tobias hofer (Gast)
Datum:

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

Autor: bussiBär (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wärs mit good old basic ?

left$   mid$   right$

oder kann das keiner von euch ?

Autor: blan (Gast)
Datum:

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

mfg blan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.