String teilen und struktur zuweisen



  • Hallo
    Meine Struktur :

    struct sys
    {
     char datum[8];
     char zeit[8];
    };
    

    Der String :

    03.04.03;13:32:49;1200 ;39 ;27 ;21 ;1,80 ;0,30 ;3,36 ;5,00 ;11,89 ;0,00 ;0,00 ;876 ;4383 ;0 ;5,00 ;
    

    mein Ansatzcode (bitte nicht lustig machen 😉 ) :

    int spalte = 0; // die aktuelle spalte
    int zzeichen = 0;  // das aktuelle zeichen im string
    int zeichen = 0;  // element-angabe, in welches das zeichen gespeichert werden soll
    struct sys daten;
    for(zzeichen = 0; zzeichen <= strlen(zeile) - 1; zzeichen++)
     {
      if(zeile[zzeichen] == ';'){spalte++;zzeichen++;zeichen = 0;}
      if(spalte == 0)
      daten.datum[zeichen] = zeile[zzeichen];
      if(spalte == 1)
      daten.zeit[zeichen] = zeile[zzeichen];
      zeichen++;
     }
    

    in daten.datum müsste "03.04.03" stehen, das tut es aber nicht!Inhalt :
    "03.04.0313:32:49<".Keine Ahnung, wo er das letzte Zeichen her nimmt. Kann mir jemand helfen? Bin C neuling und habe nur ein altes C Programmieren Buch.
    Danke



  • die Daten stehen schon richtig da, wo sie hin sollen. Aber ich vermute mal, du willst die Werte über "cout" o.ä. ausgeben. Diese Funktionen erwarten eine mit "\0" terminierten C-String.

    Hier eine "quick-and-dirty"-Lösung:

    struct sys
    {
     char datum[9];  // <= geändert
     char zeit[9];   // <= geändert
    }; 
    Der String : 
    
    03.04.03;13:32:49;1200 ;39 ;27 ;21 ;1,80 ;0,30 ;3,36 ;5,00 ;11,89 ;0,00 ;0,00 ;876 ;4383 ;0 ;5,00 ;
    mein Ansatzcode (bitte nicht lustig machen  ) :
    
    int spalte = 0; // die aktuelle spalte
    int zzeichen = 0;  // das aktuelle zeichen im string
    int zeichen = 0;  // element-angabe, in welches das zeichen gespeichert werden soll
    struct sys daten;
    for(zzeichen = 0; zzeichen <= strlen(zeile) - 1; zzeichen++)
     {
      if(zeile[zzeichen] == ';'){spalte++;zzeichen++;zeichen = 0;}
      if(spalte == 0)
      {
      daten.datum[zeichen] = zeile[zzeichen];
      daten.datum[zeichen+1]='\0';   //zugefügt
      }
      if(spalte == 1)
      {
      daten.zeit[zeichen] = zeile[zzeichen];
      daten.zeit[zeichen+1]='\0';  //zugefügt
      }
      zeichen++;
     }
    

    [ Dieser Beitrag wurde am 03.04.2003 um 14:22 Uhr von CodeWalker editiert. ]



  • struct sys
    {
     char datum[9];
     char zeit[9];
    }; 
    
    strcpy( daten.datum, strtok( zeile, ';'));
    strcpy( daten.zeit, strtok( NULL, ';'));
    

    Schneller ist allerdings:
    memcpy( &daten, zeile, 18);
    daten.datum[8] = daten.zeit[8] = '\0';
    Vorausgesetzt, die Struktur ist byte-aligned!

    [ Dieser Beitrag wurde am 03.04.2003 um 16:42 Uhr von RenéG editiert. ]


Anmelden zum Antworten