Pessoal bom dia.Tenho a seguinte situação:Tenho uma string que o Arduíno manda para minha aplicação através da porta serial com o seguinte formato:
variável = #<valor de distancia de ultrassom>##<valor de distancia de ultrassom>#...(com 10 amostras iguais a esta).Preciso separar somente os números desta string, soma-las entre sí, calcular uma media simples sobre estes valores armazenado esta média em uma variável e mostrar em um textbox mostrar o valor.
Se alguém puder ajudar, agradeço.
Tags:
As respostas para este tópico estão encerradas.
de uma olhadinha nesse link.
http://thecodebr.blogspot.com.br/2010/05/cnet-cortar-string-com-sub...
Marcos, este post é bom mas eu tenho um problema... eu preciso selecionar somente 10 valores intermitentes, por exemplo:"#13##15##12##20##22##20##19##25##100##15##" e no caso eu poderei ter valores com 2 ou no máximo 3 casas decimais.Como posso fazer isto? será que com a função split consigo fazer?
preciso pegar estes numero e fazer uma média e armazenar esta média em uma vaviável
Me intrometendo no diálogo:
Em C#. pode-se usar expressões regulares para extrair os números da string.
Ou então, para o seu caso o melhor é usar o método Split de String. O método Split quebra a string em um array, com base em um delimitador, que nos eu caso é o "#", correto?
Depois de obter o array é só calcular a média dos valores que devem ser convertidos para int.
Por exemplo,
String S = "#222#33#4";
String [] vet = S.Split("#");
o resultado vai ser:
vet[0] = "222"
vet[1] = "33"
vet[2] = "4"
https://msdn.microsoft.com/pt-br/library/b873y76a%28v=vs.110%29.aspx
JAC, obrigado pelo retorno.
Vou digerir este link com estas informações que vc me passou e retorno com um resultado.Obrigado.
é mais ou menos isso:
#define ARRAY_SIZE 20
char *input = "#13##15##12##20##22##20##19##25##100##15##";
int intArray[ARRAY_SIZE];
int split(int *array, int arraySize, char *str, const char *s)
{
char *token;
/* get the first token */
token = strtok(str, s);
/* walk through other tokens */
int i = 0;
while( token != NULL ) {
Serial.println( atoi(token) );
array[i] = atoi(token);
if (i++ == arraySize){
i--;
break;
}
token = strtok(NULL, s);
}
return (i);
}
void setup(){
Serial.begin(9600);
int n = split (intArray, ARRAY_SIZE, input, "#");
for (int i=0; i<n; ){
int tot = intArray[i] + intArray[i+1];
Serial.print(intArray[i++]); Serial.print("+");
Serial.print(intArray[i++]); Serial.print("=");
Serial.println(tot);
}
}
void loop(){
}
Vou adaptar para o codigo em C# e retorno.
Galera, obrigado pela boa vontade, mas consegui acha uma solução com as informações do colega Jose Augusto Cintra.Fiz uma adaptação no código onde mostra todos os elementos do array com o split.
Fiz uma adaptação também na String com os números...Só tenho um carácter no final do meu numero pois a aplicação capta todo que esta no inicio do carácter "#"
Segue o código fonte: (100% funcionando)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TesteStringArray
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btncalcular_Click(object sender, EventArgs e)
{
String S = "20#20#21#21#22#22#23#23#24#24#";
String [] Vetor = S.Split('#');
txtAmostra.Text = S;
txtVetor0.Text = Vetor[0];
txtVetor1.Text = Vetor[1];
txtVetor2.Text = Vetor[2];
txtVetor3.Text = Vetor[3];
txtVetor4.Text = Vetor[4];
txtVetor5.Text = Vetor[5];
txtVetor6.Text = Vetor[6];
txtVetor7.Text = Vetor[7];
txtVetor8.Text = Vetor[8];
txtVetor9.Text = Vetor[9];
int cont = 0;
int media = 0;
int soma = 0;
for (int n = 0; n < (Vetor.Length - 1); n++)
{
cont = cont + 1;
int caracter = int.Parse(Vetor[n]);
soma += Convert.ToInt32(caracter);
}
media = soma / cont;
txtMedia.Text = media.ToString();
}
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por