0

我有一个小问题,我无法弄清楚。我有一个可以读取文本文件的代码。当我阅读文本文件时,文件中有命令。此命令适用于连接到串行端口的泵。所以我要做的是获取所有命令然后通过串行端口发送它们。我可以做到,但现在我必须发出wait(value)命令。等待命令的值总是不同的。所以我必须得到value等待命令的值,然后我会将等待命令的值放入Thread.Sleep(waitvalue). 所以waitvalue是来自等待命令的值。

这是我读取文本文件的代码:

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 。

部分文本文件:
RUN
WAIT(1000)
STOP
WAIT(1600)
RUNW
WAIT(4000)
STOP

有人可以帮我弄这个吗?提前致谢

4

1 回答 1

1

尝试这个:

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);
    }
}
于 2013-10-24T07:12:28.593 回答