Rozdeleni pole char

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 08:52

Ahoj,
Mam pole char 4 cisel oddelenych strednikem (napr. 1;1;1;1 az max. 999;999;999;999) a potrebuju ho rozdelit do 4 poli char kazde s jednou hodnotou.
Peru se s tim celi rano a nejak mi to blbne.
Poradite nekdo?
Dik
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
SkullKeep
Příspěvky: 291
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od SkullKeep » 18 čer 2023, 11:00

No jestli ti má někdo poradit je třeba upřesnit jaké pole máš přesně na mysli a dát jsem tu část kódu, která ti hapruje. Bez toho se nedá moc pomoci.
:twisted: :?: :arrow: :geek: P. Q. M.

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 12:40

void podprogram()
{
memset(poleX1, 0x00, sizeof(poleX1)); //vynuluj poleX1
memset(poleY1, 0x00, sizeof(poleY1)); //vynuluj poleY1
memset(poleX2, 0x00, sizeof(poleX2)); //vynuluj poleX2
memset(poleY2, 0x00, sizeof(poleY2)); //vynuluj poleY2

int x=5; //počítadlo
int a=0; //počítadlo

while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;

while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;

while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX2[a] = INklav[x];
x++;
a++;
}
x++;
a=0;

while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY2[a] = INklav[x];
x++;
a++;
}

Serial.println(poleX1);
Serial.println(poleY1);
Serial.println(poleX2);
Serial.println(poleY2);
}
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 12:46

Kdyz to spustim poprvi tak v pohode. Kdyz pak zmenim zdrojovy pole tak se to zacne michat. A pritom pole nejdriv mazu aby nedoslo ke kolizi s minulima hodnotama.
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
SkullKeep
Příspěvky: 291
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od SkullKeep » 18 čer 2023, 13:28

Promiň, ale z toho co jsi tu napsal nevím odkud načítaji data z INklav.
:twisted: :?: :arrow: :geek: P. Q. M.

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 13:48

Pole char INklav se plni v jine casti programu - to neni podstatne pro tenhle podprogram. Potrebna data jsou od INklav[5] dal podle delky jednotlivych hodnot
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 13:54

Jeste doplnim deklaraci poli:
char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
gilhad
Příspěvky: 788
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Rozdeleni pole char

Příspěvek od gilhad » 18 čer 2023, 14:09

IMHO by měla ta XY12 pole být char[4] aby se tam ještě vešla ukončovací nula ( '\0' ) a po každém tom while by ještě mělo být poleX1[a]=0; (nebo poleY2[a]='\0'; nebo tak)

Protože jinak ti ty println vypíšou celé to pole do nejbližšího nulového bytu (což je kdoví kde) a hlavně ti tam po kombinaci dlouhé číslo, krátké číslo zbude ještě konec toho dlouhého čísla. (A pokud budeš mít 3znakové číslo, třeba 999, tak se ti tam bude vypisovat i to, co je v paměti za koncem toho pole)

Uživatelský avatar
SkullKeep
Příspěvky: 291
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od SkullKeep » 18 čer 2023, 14:37

Jestli to chápu dobře tak by to nohlo vypadat nějak takhle:

Kód: Vybrat vše

void podprogram()
{
  memset(poleX1, '\0', sizeof(poleX1)); //vynuluj poleX1
  memset(poleY1, '\0', sizeof(poleY1)); //vynuluj poleY1
  memset(poleX2, '\0', sizeof(poleX2)); //vynuluj poleX2
  memset(poleY2, '\0', sizeof(poleY2)); //vynuluj poleY2

  byte x = 5; //počítadlo
    while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
    {
      for (byte cislo = 0; cislo < 3; cislo++)// plnění pole
      {
        x = x + cislo;
        poleX1[cislo] = INklav[x];
      }
      poleX1[3] = '\0';
      x++;
    }

    while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
    {
      for (byte cislo = 0; cislo < 3; cislo++)
      {
        x = x + cislo;
        poleY1[cislo] = INklav[x];
      }
      poleY1[3] = '\0';
       x++;
    }


    while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
    {
      for (byte cislo = 0; cislo < 3; cislo++)
      {
        x = x + cislo;
        poleX2[cislo] = INklav[x];
      }
      poleX2[3] = '\0';
      x++;
    }

    while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
    {
      for (byte cislo = 0; cislo < 3; cislo++)
      {
        x = x + cislo;
        poleY2[cislo] = INklav[x];
      }
      poleY2[3] = '\0';
  }
  Serial.println(poleX1);
  Serial.println(poleY1);
  Serial.println(poleX2);
  Serial.println(poleY2);
}
:twisted: :?: :arrow: :geek: P. Q. M.

Uživatelský avatar
Diego
Příspěvky: 169
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Rozdeleni pole char

Příspěvek od Diego » 18 čer 2023, 15:10

Takze jestli to chapu dobre tak se mi to uklada dobre ale mrsi to to zobrazovani printem. Tak to by nevadilo, este si to overim a uvidime ;)
Dik za rady
https://arze.cz - ARduino Zapojení Elektronika

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 41 hostů