Hi I am working with a note sorter machine that is connected to a serial port. I am able to retrieve a data into text box like
JL206F ID:VDE40050
2015/05/29 11:02:19
JBatch_No.:067
JOperator ID:15
Mixed Counting
W
Deposit Amount: 0.00
denom count value
UVK(|????DW50D 1 50.00
JUVK(|????DW20D 1 20.00
JUVK(|????DW10ND 1 10.00
J
Total: 3 80.00
Coin: 0.00
Balance: 0.00
Now i want this information to come in datagrid Like Batch no, Balance , Operator id etc in columns. o far my code is as follows. I am able to retrieve the info but bit by bit and only in one column. Please helpUserInitialization(); private void UserInitialization() { _spManager = new SerialPortManager(); SerialSettings mySerialSettings = _spManager.CurrentSerialSettings; serialSettingsBindingSource.DataSource = mySerialSettings; portNameComboBox.DataSource = mySerialSettings.PortNameCollection; baudRateComboBox.DataSource = mySerialSettings.BaudRateCollection; dataBitsComboBox.DataSource = mySerialSettings.DataBitsCollection; parityComboBox.DataSource = Enum.GetValues(typeof(System.IO.Ports.Parity)); stopBitsComboBox.DataSource = Enum.GetValues(typeof(System.IO.Ports.StopBits)); _spManager.NewSerialDataRecieved += new EventHandler(_spManager_NewSerialDataRecieved); this.FormClosing += new FormClosingEventHandler(MainForm_FormClosing); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { _spManager.Dispose(); } void _spManager_NewSerialDataRecieved(object sender, SerialDataEventArgs e) { if (this.InvokeRequired) { // Using this.Invoke causes deadlock when closing serial port, and BeginInvoke is good practice anyway. this.BeginInvoke(new EventHandler(_spManager_NewSerialDataRecieved), new object[] { sender, e }); return; } int maxTextLength = 100000; // maximum text length in text box if (tbData.TextLength > maxTextLength) tbData.Text = tbData.Text.Remove(0, tbData.TextLength - maxTextLength); string str = Encoding.ASCII.GetString(e.Data); tbData.AppendText(str); string[] myArray = {str}; int k=0; for (int i = 0; i < str.Length;i++ ) { k = str.IndexOf("10", i); if (k!=-1) { dataGridView1.Rows.Add(str.Substring(i,k-1)); i=k+2; } else { dataGridView1.Rows.Add(str.Substring(i, str.Length - i)); i = str.Length; } } tbData.ScrollToCaret(); } // Handles the "Start Listening"-button click event private void btnStart_Click(object sender, EventArgs e) { _spManager.StartListening(); } // Handles the "Stop Listening"-button click event private void btnStop_Click(object sender, EventArgs e) { _spManager.StopListening(); } private void serialSettingsBindingSource_CurrentChanged(object sender, EventArgs e) { } private void MainForm_Load(object sender, EventArgs e) { } private void tbData_TextChanged(object sender, EventArgs e) { } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { }
ramya bharathPosted Jun 9, 2015, 1:05 PM
Gunjan MananPosted Jun 9, 2015, 4:05 AM
ramya bharathPosted Jun 9, 2015, 12:55 AM
string input=" JL206F ID:VDE40050
2015/05/29 11:02:19
JBatch_No.:067
JOperator ID:15";
// Here we call Regex.Match.
Match match = Regex.Match(input, @"/(\w)\ W(\d {4}/\d {2}/\d [2} \d {2}:\d {2}:\d {2})\WJBATCH_NO.:([A-Za-z0-9])\WJOPERATION_ID:([A-Za-z0-9])",
RegexOptions.IgnoreCase);
// Here we check the Match instance.
if (match.Success)
{
// Finally, we get the Group value and display it.
string key = match.Groups[1].Value;
String time = match.Groups[2].Value;
String batchno = match.Groups[3].Value;
String operid = match.Groups[4].Value;
}
Gunjan MananPosted Jun 8, 2015, 9:26 AM
Gunjan MananPosted Jun 5, 2015, 6:19 AM
Gunjan MananPosted Jun 5, 2015, 5:57 AM
ramya bharathPosted Jun 5, 2015, 4:43 AM
JL206F ID:VDE40050
2015/05/29 11:02:19
JBatch_No.:067
JOperator ID:15
If so then using regex or string . contains we can check if Batch_No string exusts in thar output and then allocate cell accordingly.
Similarly we can set keyword check for others
Gunjan MananPosted Jun 5, 2015, 4:36 AM
Gunjan MananPosted Jun 5, 2015, 4:24 AM
ramya bharathPosted Jun 5, 2015, 12:57 AM
If so you can do like this
1. If the string is a batch no add a new row and add cell 0 with value
2. If balance get the last row of datagrid view and check cell 1 as empty then add the value to it.
Similarly you can process others for which to appropriately add to the cells you have know the type of string we get if that is possible you can do other's easily
Gunjan MananPosted Jun 4, 2015, 10:45 AM
ramya bharathPosted Jun 3, 2015, 11:46 PM
note:
Your code is tough to read please update that In your question.