logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ Builder 6 - problem z parsowaniem danych z portu COM do TEdit

hitman0807 01 Mar 2009 20:57 1059 2
REKLAMA
  • #1 6223430
    hitman0807
    Poziom 11  
    Posty: 16
    Witam,
    piszę programik w C++ builderze i napotkałem problem. Otóż mam pewne urządzenie, które przesyła dane do komputera przez port com w następującej postaci "12,3456 78900 " - czyli liczba, po niej spacja potem liczba i znów spacja. Tak właśnie wygląda jeden paczka danych. Program przyjmuje dane, a następnie ma zapisać np. w 2 polach Tedit. I tutaj właśnie zaczyna się problem... Po odebraniu danych zapisywane są one w zmiennej dane[14] (char). Aby wydobyć każdą z liczb - w pętli kopiuję znak po znaku do innej zmiennej kat[8] oraz wartosc[5] (obydwie char). Kiedy wyrzucam to pole Edit to w pierwszym polu zamiast np. 12,3456 pojawia się 12,3456 P¬« zaś w drugim zamiast 78900 pojawia się 0456 7~12,3456 P¬«. Ma ktoś może pomysł co źle zrobiłem?!? Kolejna zaskakująca (jak dla mnie) rzecz to wpływ wykomentowanej linijki (tj. //String napis = dane; // ???). W momencie kiedy ją odkomentuję - zmienia się działanie programu i w drugim polu edycyjnym pojawia się ©0456 $. Dlaczego? Moim zdaniem nie może to mieć wpływu na przebieg programu. Z góry dziękuję za odpowiedź.

    poniżej uproszczona wersja programu (bez odbierania danych z com'a)

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    char dane[14] = "12,3456 00456 ";   //tak przychodzą dane
    									//czyli 2 liczby: 12,3456 oraz 00456
    
    char kat[7];                        //tutaj będzie pierwsza liczba
    char wartosc[5];                    //a tutaj znajdzie się druga
    int i;
    
    String napis = dane;      // ???
    
    for (i=0; i < 8; i++)
    kat[i] = dane[i];    //pętla przepisuje znak po znaku (pierwsze 7 znaków) z dane do kat
    Edit1->Text = kat;   //zapis zmiennej kat do pola Edit1
    
    for (i=9; i < 14; i++)
    wartosc[i-8] = dane[i];   // jak wyżej, tylko druga liczba
    Edit2->Text = wartosc;
    }
  • REKLAMA
  • Pomocny post
    #2 6223446
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    na końcu musi być wartownik stringa - znak o kodzie 0. Przy kopiowaniu nie zapomnij dopisać tego znaku.
REKLAMA