从文本文件命令获取值
本文关键字:获取 命令 文件 文本 | 更新日期: 2023-09-27 18:36:44
我有一个小问题,我无法弄清楚。我有一个代码可以读取文本文件。当我读取文本文件时,文件中有命令。此命令适用于连接到串行端口的泵。所以我要做的是获取所有命令 en 通过串行端口发送它们。我可以这样做,但现在我必须发出wait(value)
命令。等待命令的值始终不同。所以我必须获取等待命令的value
,然后将等待命令的值放入Thread.Sleep(waitvalue)
。因此,waitvalue
是 wait 命令中的值。
这是我读取文本文件的代码:
Stream mystream;
OpenFileDialog commandFileDialog = new OpenFileDialog();
if (commandFileDialog.ShowDialog() == DialogResult.OK)
{
if ((mystream = commandFileDialog.OpenFile()) != null)
{
string fileName = commandFileDialog.FileName;
CommandListTextBox.Text = fileName;
string[] readText = File.ReadAllLines(fileName);
foreach (string fileText in readText)
{
_commandList.Add(fileText);
}
CommandListListBox.DataSource = _commandList;
}
}
_commandlist是一个字符串列表。StringList 是我的同事的一个函数,在这个函数中,你将有一个字符串列表。在字符串列表中,我将放置文件中的文本。然后,我将_commandlist指定为列表框的数据源。
这是运行命令的代码,也是我试图从等待命令中获取值的代码的一部分。但是我不知道如何获得值。
_comport.PortName = "COM6";
_comport.Open();
foreach (string cmd in _commandList)
{
if (cmd.Contains("WAIT"))
{
//Action
}
_comport.Write(cmd + (char)13);
Thread.Sleep(4000);
}
_comport.Close();
在Thread.Sleep(4000)
,我必须用我的等待值替换 4000。
部分文本文件:
跑
等(1000)
停
等等(1600)
润
等(4000)
停
有人可以帮助我吗?提前致谢
试试这个:
foreach (string cmd in _commandList)
{
if (cmd.StartsWith("WAIT"))
{
//Action
}
_comport.Write(cmd + (char)13);
int wait = 0;
var waitString=cmd.Substring(cmd.IndexOf('(') + 1,
cmd.IndexOf(')') - cmd.IndexOf('(') - 1);
if (Int32.TryParse(waitString, out wait))
{
Thread.Sleep(wait);
}
}
[编辑]
我不确定我是否完全理解处理逻辑,但这是我对代码结构的最佳猜测。
// iterate through the commands
foreach (string cmd in _commandList)
{
// check if the current command is WAIT
if (cmd.StartsWith("WAIT"))
{
int
wait = 0, // the amount of milliseconds to sleep
startPosition = cmd.IndexOf('(') + 1,
length = cmd.IndexOf(')') - cmd.IndexOf('(') - 1;
// check if the length of the string between '(' and ')' is larger then 0
if (length > 0)
{
var waitString = cmd.Substring(startPosition, length);
// check if the string between '(' and ')' is an integer
if (Int32.TryParse(waitString, out wait))
{
// sleep for 'wait' milliseconds
Thread.Sleep(wait);
}
}
}
// current command is not WAIT
else
{
// send it to the COM port
_comport.Write(cmd + (char)13);
}
}