Как я могу разделить номер тега RFID как целое число? - PullRequest
0 голосов
/ 23 марта 2019

Я получаю информацию, читая карточку, но как мне получить номер тега как int?

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
            }

            MessageBox.Show("Success");
        }
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            textRFID.Text += indata;
        }

rfid-ss

Это строка, которую мне нужно проанализировать:

"RFID tag detected Tag Type:\tMifare One (S50) The tag's number is:\t235717311 Read Checksum:\t238 Calculated Checksum:\t238"

Благодаря @haldo я могу получить свой номер тега, но он выдает ошибку «ссылка на объект не установлена ​​для экземпляра объекта», и я ставлю try catch, когда я нажимаю ok для ошибки, он идет и выводится так, как я хотел , Как мы можем удалить эту ошибку?

Вот мой код редактирования:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            string contains = "The tag's number is:";
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            int tagNumber = 0;
            try
            {
                indata.Split(Environment.NewLine.ToCharArray())      // split on newline chars
                      .FirstOrDefault(s => s.Contains(contains)) // get first string matching pattern above 
                      .Split(':')                                    // split on ':'
                      .FirstOrDefault(x => int.TryParse(x, out tagNumber));  // return first successful try parse
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            textRFID.Text = tagNumber.ToString();            
        }

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Вы можете использовать регулярное выражение, чтобы найти шаблон и захватить группу цифр после «Номер тега:», а затем проанализировать захваченную строку как int.Как то так:

string pattern = "The tag's number is:(\\d+)";
string indata = "blah blah \nasdfasdfasdf\nThe tag's number is:123389882\nasdfsadf\nfgjdjgjgd";
var matches = Regex.Match(indata, pattern);
int? tagNumber = null;

if (matches.Success)
{
    var grp = matches.Groups[1];
    string num = grp.Value;
    tagNumber = int.Parse(num);
}

// tagNumber is 123389882
1 голос
/ 23 марта 2019

Почему бы вам не использовать строковые манипуляторы, такие как Substring или String.split('').вы получите Tag number, а затем используйте Convert.ToInt(your tag number here) для преобразования в INT.По умолчанию это string.вам нужно конвертировать его в Integer

...