Rozdeleni pole char
Rozdeleni pole char
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
			
			
									
									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
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Re: Rozdeleni pole char
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.
			
			
									
									Re: Rozdeleni pole char
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);
}
			
			
									
									{
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
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Re: Rozdeleni pole char
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
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Re: Rozdeleni pole char
Promiň, ale z toho co jsi tu napsal nevím odkud načítaji data z INklav.
			
			
									
									Re: Rozdeleni pole char
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
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Re: Rozdeleni pole char
Jeste doplnim deklaraci poli:
char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
			
			
									
									char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
https://arze.cz - ARduino Zapojení Elektronika
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Re: Rozdeleni pole char
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)
			
			
									
									
						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)
Re: Rozdeleni pole char
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);
}Re: Rozdeleni pole char
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
			
			
									
									Dik za rady
https://arze.cz - ARduino Zapojení Elektronika
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
						https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host