把textbox中的文本按照/r/n拆分成string[]

本文介绍了一种使用C#进行字符串处理的方法,包括去除空白字符及按特定字符分割字符串。通过实例演示了如何利用Trim()方法去除字符串两端的空白,并使用Replace()与Split()方法实现字符串的有效分割。

 string str = this.txtNames.Text.Trim();
        string[] result = str.Replace("/r", string.Empty).Split(new char[] { '/n' });

private void button2_Click(object sender, EventArgs e) { //数据发送按钮 byte[] temp = new byte[1]; try { //首先判断串口是否开启 if (serialPort1.IsOpen) { int num = 0; //获取本次发送字节数 //串口处于开启状态,将发送区文本发送 //判断发送模式 if (radioButton4.Checked) { //以HEX模式发送 //首先需要用正则表达式将用户输入字符中的十六进制字符匹配出来 string buf = textBox_send.Text; string pattern = @"\s"; string replacement = ""; Regex rgx = new Regex(pattern); string send_data = rgx.Replace(buf, replacement); //不发送新行 num = (send_data.Length - send_data.Length % 2) / 2; for (int i = 0; i < num; i++) { temp[0] = Convert.ToByte(send_data.Substring(i * 2, 2), 16); serialPort1.Write(temp, 0, 1); //循环发送 } //如果用户输入的字符是奇数,则单独处理 if (send_data.Length % 2 != 0) { temp[0] = Convert.ToByte(send_data.Substring(textBox_send.Text.Length - 1, 1), 16); serialPort1.Write(temp, 0, 1); num++; } //判断是否需要发送新行 if (checkBox3.Checked) { //自动发送新行 serialPort1.WriteLine(""); } } else { //以ASCII模式发送 //判断是否需要发送新行 if (checkBox3.Checked) { //自动发送新行 serialPort1.WriteLine(textBox_send.Text); num = textBox_send.Text.Length + 2; //回车占两个字节 } else { //不发送新行 serialPort1.Write(textBox_send.Text); num = textBox_send.Text.Length; } } send_count += num; //计数变量累加 label6.Text = "Tx:" + send_count.ToString() + "Bytes"; //刷新界面 } }
03-19
#region 2.通讯界面 private async void btn_发送_Click(object sender, EventArgs e) { try { // 解析TextBox输入 var (address, value) = ParseTextBoxInput(txt_connTest); // 根据的类型调用相应的Modbus方法 if (value is bool boolValue) { // 线圈写入 await automation.modbusTCP.WriteSingleCoilsAsync(1, address, boolValue); MessageBox.Show($"功设置线圈 {address} = {boolValue}"); } else if (value is int intValue) { // 寄存器写入 await automation.modbusTCP.WriteSingleRegistersAsync(1, address, intValue, ModbusLibrary.ModbusTCP.DataType.字); MessageBox.Show($"功设置寄存器 {address} = {intValue}"); } } catch (Exception ex) { MessageBox.Show($"错误: {ex.Message}", "操作失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// <summary> /// 输入文本解析 /// </summary> /// <param name="textBox">测试内容</param> /// <returns></returns> private (string address, object value) ParseTextBoxInput(TextBox textBox) { string input = textBox.Text.Trim(); if (string.IsNullOrEmpty(input)) throw new ArgumentException("输入不能为空"); // 分割输入字符串 var parts = input.Split('='); if (parts.Length != 2) throw new ArgumentException("输入格式错误,应为:地址 = "); string address = parts[0].Trim().ToUpper(); // 地址部分 string valueStr = parts[1].Trim(); // 部分 // 根据地址前缀判断类型 if (address.StartsWith("M") || address.StartsWith("X") || address.StartsWith("Y")) { // 线圈类型 - 解析为bool bool boolValue; string lowerValue = valueStr.ToLower(); if (lowerValue == "true" || lowerValue == "1" || lowerValue == "on") { boolValue = true; } else if (lowerValue == "false" || lowerValue == "0" || lowerValue == "off") { boolValue = false; } else { throw new ArgumentException($"线圈格式错误: {valueStr}"); } return (address, boolValue); } else if (address.StartsWith("D")) { // 寄存器类型 - 解析为int if (int.TryParse(valueStr, out int intValue)) { return (address, intValue); } else { throw new ArgumentException($"寄存器必须是整数: {valueStr}"); } } else { throw new ArgumentException($"不支持的地址类型: {address}"); } } #endregion这样怎样
最新发布
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值