如何在多行字符串变量中搜索字符串?C#.
本文关键字:字符串 搜索 变量 | 更新日期: 2023-09-27 18:36:37
我从控制台保存命令的输出。
输出可以有多个行。
如何在所有输出中搜索特定单词?
这是我当前的代码:
string buff, ok;
ok = "OK";
SerialPort p = ...
// p initialization...
p.Write("AT+CMGL='"REC UNREAD'" " + "'r");
System.Threading.Thread.Sleep(1000);
buff = p.ReadExisting();
if (buff.Contains(ok))
// do smth
输出示例:
+CMGL: 10,"记录读取","0372022244",,"12/02/22,08:08:58+08"2073692066616374757261207661206669206163686974617461206C612074696D702120446574616C696920696E206D6167617A696E656C6520566F6461666F6E6520736175206C612062616E6361206476732E还行
这会从 buff 搜索所有行吗? 还是只是第一行? 我这样试过,似乎他在输出中找不到"OK"
namespace SerialTest
{
public class Program
{
public static void Main(string[] args)
{
string buff="0";
string ok = "OK";
SerialPort p = new SerialPort("COM28");
p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
p.Open();
string line = "1";
p.Write("AT" + "'r");
buff = p.ReadExisting();
p.Write("AT+CMGF=1"+ "'r" );
buff = p.ReadExisting();
do
{
p.Write("AT+CMGL='"REC UNREAD'" " + "'r");
buff = p.ReadExisting();
if (buff.Contains(ok))
Console.WriteLine("Everything is OK");
else
Console.WriteLine("NOK");
line = Console.ReadLine();
} while (line != "quit");
p.Close();
}
public static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine((sender as SerialPort).ReadExisting());
}
}
}
p.ReadExisting()
对SerialPort
执行读取操作。
MSDN 文档说:
根据编码读取所有立即可用的字节,在两者中 串行端口对象的流和输入缓冲区。
这意味着您可能无法在一次调用ReadExisting
中获得所需的所有数据,因为该数据可能尚不可用。在进行Contains
检查之前,您可能应该遍历并从串行端口读取所有数据。
附带说明:尤其是在处理串行操作时,使用 Thread.Sleep
不是一个好主意。不要在等待数据时休眠,而是使用 SerialPort.DataReceived
事件读取可用数据。
尝试此操作以正确从串行端口读取数据并摆脱Sleep
String data = "";
p.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
data += indata;
}
然后设置一个计时器,在 1 秒后检查输出。在计时器事件处理程序中,检查data.Contains("OK");
buff.Contains(ok)
将搜索整个字符串(buff
)以查找您指定的字符串(ok
)。
换行符 (''n'
) 的处理方式与字符串中的任何其他字符相同。如果你有一个值为 "a'nb'nc"
的字符串,并且你要搜索 "'nc"
,它将返回 true,因为该字符串包含一个由字符 ''n'
和 'c'
组成的字符串。
因此,如果这对您不起作用,我会重新检查 buff
和 ok
的值,因为这段代码应该没问题。