ahmed_sa Ответов: 1

Когда вы разделяете переменную msg на большее количество строк, она не дает мне значений в строках?


Проблема

Когда вы разделяете переменную msg на большее количество строк, она не дает мне значений в строках ?
переменная MSG в отладки дай мне сканирование текста ниже


Подробности

я работаю в windows form c# vs 2015

я использую считыватель штрих-кодов для чтения qr-кода

сканер штрих-кода работает как USB-клавиатура и определяется как HID-драйверы

если я заменю переменную msg текстовым полем, она будет работать в режиме чтения данных и плеваться

Успех так что

в чем проблема разбиения кода ниже ?

сканирование текста :

30 Генеральная конференция Арабских фармацевтических союзов

Имя пользователя: Халид Рамзи

Страна : Саудовская

Членство: часть

Серийный номер: 1014

мой код



public partial class Form1 : Form
    {
        DateTime _lastKeystroke = new DateTime(0);
        List<char> _barcode = new List<char>(10);
        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
            if (elapsed.TotalMilliseconds > 100)
                _barcode.Clear();

            // record keystroke & timestamp
            _barcode.Add(e.KeyChar);
            _lastKeystroke = DateTime.Now;

            // process barcode
            if (e.KeyChar == 13 && _barcode.Count > 0)
            {

                    string msg = new String(_barcode.ToArray());

                string[] lines = msg.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

                if (lines.Length > 5)
                {
                    string msg1 = lines[1].Substring(lines[1].IndexOf(":") + 1);
                    label3.Text = msg1;
                    string msg2 = lines[2].Substring(lines[2].IndexOf(":") + 1);
                    label4.Text = msg2;
                    string msg3 = lines[3].Substring(lines[3].IndexOf(":") + 1);
                    label5.Text = msg3;
                    string msg4 = lines[4].Substring(lines[4].IndexOf(":") + 1);
                    label6.Text = msg4;
                    label2.Text = lines[5].Substring(lines[5].IndexOf(":") + 1);
                }
                    _barcode.Clear();
            }
        }
    }
}


переменная msg в debug имеет значения сканирования qr-кода

но теперь проблема

Как разбить их на строки, как описано выше ?

Что я уже пробовал:

when split msg variable to more lines it not give me values in lines?

1 Ответов

Рейтинг:
2

Graeme_Grant

Вы загрузили данные в HexViewer? Вы должны убедиться, что разрыв/разделитель является символом(символами) CR, NL или CR+NL. Сканер может использовать не то же самое, что устройство/компьютер, на котором выполняется ваш код, поэтому Environment.NewLine может быть, это несоответствие.


ahmed_sa

так вот как загружаются данные в HexViewer?

Graeme_Grant

Да, посмотрите на байты. Вы, очевидно, не знаете, что такое символ(ы) разрыва/разделителя.

ahmed_sa

я открываю файл и сканирование QR и считывания данных сканером с этим файлом после этого установите hex-просмотрщике и откройте файл по этой или прочитанные данные я получаю значения, но я не знаю, что сепаратор или сломать, так что то, что я делаю

ahmed_sa

http://www.mediafire.com/view/dbpn167nne76dwz/readed_data_from_file.jpg

Graeme_Grant

Итак, 0xOD 0xOA = CR+LF = " \r\n"

ahmed_sa

так что то, что я сейчас делаю, пожалуйста, помогите мне

ahmed_sa

то, что я изменяю в своем коде в соответствии с результатом, который я получаю от hex viewer

Ralf Meier

Введите "\r\n " или CR и LF в команду split (как seperator) вместо Environment.Новая строка
Тогда попробуйте еще раз ...

Graeme_Grant

спасибо, я думал, что это было очевидно, основываясь на вышесказанном.