2013-10-24 2 views
0

У меня есть небольшая проблема, которую я не могу понять. У меня есть код, который читал текстовый файл. Когда я читаю текстовый файл, в файле есть команды. Эти команды предназначены для насоса, который подключен к последовательному порту. Поэтому мне нужно сделать все команды, чтобы отправить их через последовательный порт. Я могу это сделать, но теперь мне нужно сделать команду wait(value). Значение команды wait всегда отличается. Поэтому я должен получить команду value команды wait, а затем я поставлю значение команды wait в Thread.Sleep(waitvalue). Таким образом, значение waitvalue - это значение команды wait.получить значение из команды textfile

Это мой код для чтения текстового файла:

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. StringList - это функция моего сотрудника, в этой функции у вас будет список строк. В строковом списке я выложу текст из файла. И тогда я присвою _commandlist как источник данных моего списка.

Это код для запуска команды и является частью кода. Я пытаюсь получить значение из команды wait. Но я не могу понять, как получить значение.

_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 с моим waitvalue.

Часть текстового файла:
RUN
WAIT (1000)
СТОП
WAIT (1600)
RUNW
WAIT (4000)
СТОП

Может кто-то помочь мне с этим ? Заранее спасибо

+1

Какова структура записи WAIT в файле? Как только вы это знаете, вам просто нужно разбить строку с помощью Split, а затем Convert.ToInt32 на итоговую числовую строку. Передайте полученный int в ваш вызов сна. – Baldrick

+0

Я отредактирую вопрос, я поставлю часть текстового файла. –

+0

Команда wait - это строка, поэтому да, я должен преобразовать ее в int, но я не знаю, как получить значение –

ответ

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); 
    } 
} 

[EDIT]

Я не уверен, если я понимаю, именно логику обработки, но вот моя догадка для структуры из код.

// 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); 
    } 
} 
+0

Маленький вопрос, что ждет в Thread.Sleep (wait). Потому что он этого не знает. Или мне нужно сделать строку или что-то еще? Извините за вопрос, но я все еще учился –

+0

Я обновил свой ответ. –

+0

Я получаю эту ошибку: длина не может быть меньше нуля. Имя параметра: length –

Смежные вопросы