如题,我要把txtbox里每一行数据都识别,然后把它组成固定的信息帧发送出去。
我的思路是,先把txt文本里的内容显示在txtbox里,再逐行识别内容(txt文本内容格式是固定的,一个关键词,后面是它的参数值),识别关键词后把它的参数值组成信息帧发送出去(信息帧格式以及怎么组成我已经会了),有多少行txt文本就要发送多少信息帧。请问要怎么实现呢?现在的代码如下:
string filePath = @"H:\txt.txt";
try
{
if (File.Exists(filePath))
{
richTextBox2.Text = File.ReadAllText(filePath); //读取txt文本内容到txtbox2
byte[] mybyte = Encoding.UTF8.GetBytes(richTextBox2.Text);
richTextBox2.Text = Encoding.UTF8.GetString(mybyte);
}
txt文本内容是这样的格式:
LCD_WIDTH 24
LCD_XSIZE 1080
LCD_YSIZE 2340
例如识别到LCD_WIDTH 后就把24组成信息帧发送出去,以此类推。
textBox1.Lines属性,你遍历它,它就是每一行
foreach (string line in textBox1.Lines)
...
.
加个函数
int fillArray(ref List<string> rOutArray, Dictionary<string, string> rdDict, params string[] paraValue)
{
int index = 0;
List<string> outArray = rOutArray;
for (; index < paraValue.Length; index++)
{
string dName = paraValue[index].ToLower();
if (rdDict.ContainsKey(dName) == false) { return index; }
rOutArray.Add(rdDict[dName]);
}
return -1;
}
调用改为
string[] tmpStrArry;
string filePath = @"H:\txt.txt";
List<string> outArray = new List<string>();
Dictionary<String, String> dDict = new Dictionary<String, String>();
try
{
tmpStrArry = System.IO.File.ReadAllLines(filePath, Encoding.UTF8);
foreach (string tmpStr in tmpStrArry)
{
string[] strList = tmpStr.Replace('\t', ' ').Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (strList.Length != 2 ) continue;
string dName = strList[0].ToLower();
string dValue = strList[1].ToLower();
if (dDict.ContainsKey(dName) == false) dDict.Add(dName, string.Empty);
dDict[dName] = dValue;
}
//以下为,用dDict进行输出数组按需组合的例子
outArray.Clear();
int outInt = fillArray(ref outArray, dDict,
"LCD_WIDTH", "LCD_XSIZE" //组合输出顺序、个数
//"LCD_WIDTH", "LCD_XSIZE", "LCD_YSIZE" //
//"LCD_WIDTH", "TTT", "LCD_YSIZE" //加入不存在的TTT
);
if (outInt == -1)
{
//组合正确, outArray 为输出数组, dDict 为字典用于判断
}
else
{
//错误处理 outInt为错误的关键字位置
}
}
转为数组
var tmpVar = BitConverter.GetBytes(int.Parse(dDict["lcd_width"]));
byte[] rf_bb = new byte[] { 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Array.Copy(tmpVar, 0, rf_bb, 5, 2);
rf_bb[7] = (byte) ((rf_bb.Aggregate((p, n) => (byte)((p + n) % 0xffff))) & 0xff);
rf_bb[8] = 0x09;