array zerlegen und bearbeiten
Dienstag, 22. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  Schnittstellen (CCS)  |  array zerlegen und bearbeiten « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: array zerlegen und bearbeiten  (Gelesen 2078 mal)
 
maksim
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« am: Dezember 11, 2008, 10:17:31 »

Hallo Leute,

ich hab wieder mal mein PIC ausgepackt um etwas rumzuspielen und komm wieder mal nicht weiter.
Ich möchte ein string über rs232 auslesen, zerlegen und verarbeiten. Das Auslesen klappt, das zerlegen eigentlich auch, aber weiter komm ich nicht mehr.
So sieht mein string aus, den ich einlese und dann zerlegen möchte. So zerlegen, dass jede Zahl in eigenem array steht, so dass ich es dann weiter bearbeiten kann.
$255.100.200.100.100.311.411.511.0000$

Code:
void  RDA_isr(void)
{
    char buffer[100],buf[],trennzeichen[1],*ptr,*ptr3,array[10];
    int8 z = 0,dollar=0;
    int16 x=0;
    int1 done = false;
    do
    {
        // Zeichen empfangen?
        if(kbhit(pc))
        {
            buf[z] = getc(pc);
            // TRENNEZEICHEN gefunden?
            if(buf[z] == STARTZEICHEN)
            {
               
                dollar++;
            }
            z++;           
            // Buffer voll oder String komplett empfangen?
            if(z == 119 || dollar == 2) done = true;
        }
    }while(!done);
    fprintf(pc,buf);
   
    //Hier wird der buf-string aufgeteilt

    strcpy(trennzeichen,"$");                   //array mit trennzeichen beschreiben
    ptr=strtok(buf,trennzeichen);               //array buf zerlegen
    fputs(ptr,pc);
   
    strcpy(trennzeichen,".");                   //neues Trennzeichen definieren
    ptr3=strtok(ptr,trennzeichen);              //string zerlegen
    while(ptr3!=0)
         {
         puts(ptr3);
         x=atol(ptr3);
         ptr3=strtok(0,trennzeichen);
         }
   
}
Das klappt soweit. Bekomme jede einzelne Zahl am PC angezeigt. Aber wie ich jetzt diese zahl in ein array pack, das habe ich noch nicht rausgefunden. Ich hoff, es kann mir einer helfen?

Gruß Max
Gespeichert
Master Snowman
Sr. Member
****
Offline Offline

Beiträge: 289



Profil anzeigen WWW
« Antworten #1 am: Dezember 11, 2008, 16:28:21 »

hallo Max
dein beitrag wurde schon 17x gelesen, und du hast noch immer keine antwort. wahrscheinlich liegt's daran, dass dich andere wie ich nicht verstehen, was du hast und was du willst... was soll nacher wie "aussehen"?
Gespeichert
maksim
Newbie
*
Offline Offline

Beiträge: 9


Profil anzeigen
« Antworten #2 am: Dezember 11, 2008, 21:37:18 »

Wenn ich es mir jetzt so auch durchlese, verstehe ich auch nix mehr.  Lächelnd
Ich versuche jetzt mal das Ganze anders zu erklären. Mein Ziel ist, das ich einen eingelesenen String z.B den hier "Spannung=.13.V.Strom=.12,1.A" so verabeite, dass ich zum Schluss auf jede Zahl zugreifen kann. In dem Fall möchte ich die Zahl 13 als int wert haben und die 12,1 als float. Die Punkte dienen in dem Fall als Trennzeichen, so kann ich den string besser zerlegen.
Wenn ich diesen String zerleg, wie in dem Beispiel
Code:
strcpy(buf,"Spannung=.13.V.Strom=.12,1.A");
strcpy(trennzeichen,".");                   
ptr=strtok(buf,trennzeichen);               
while(ptr!=0)
         {
         puts(ptr);
         ptr=strtok(0,trennzeichen);
         }
dann bekomme ich folgendes am pc angezeigt
Spannung=
13
V
Strom=
12,1
A

und meine Frage ist, wie komme ich an diese 2 Zahlen?
Gespeichert
Master Snowman
Sr. Member
****
Offline Offline

Beiträge: 289



Profil anzeigen WWW
« Antworten #3 am: Dezember 12, 2008, 09:27:28 »

das geht am einfachsten(!) wenn du genau weisst, wo die zahlen im string sind bzw. die zahlen immer in der gleichen form an der gleichen stelle im sting sind (ggf. mit vorausgehenden nullen). so kannst du sehr leicht abfragen, welches zeichen es ist und dir die zahl zusammenrechnen.

z.b.
unsigned int Spannung = 10*(sting[11]-'0')+(string[12]-'0');

hinweis 1: jedes zeichen im string hat einen bestimmten wert. der ausdruck string[11] liefert den unsigned char wert des 11. zeichens im string. der ausdruck '0' entspricht dem unsigned char wert, der das zeichen 'zahl_null' hat. also mit dem ausdruck string[11]-'0' bekommst du den unsigned char wert derjenigen ziffer, die an dieser stelle im string steht. aus den einzelnen ziffern kannst du dir dann die ganze zahl zusammenrechnen.
hinweis 2: wenn du bei einer zahl keine vorausgehenden nullen hast, wird's schwieriger
« Letzte Änderung: Dezember 12, 2008, 09:34:09 von mc.emi » Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.039 Sekunden mit 19 Zugriffen.
 
Top! Top!