2014-11-06 92 views
0

我正在尝试使按钮检查openFileDialog1.FileName中文件的每一行,并且它是否包含字符串“LCD”或“laser”和“on”之一或者在同一行上包含“激光”和“关”字符串以及字符串“.end”然后执行某些操作。无法使用File.ReadAllLines读取文件

我是C#的新手(本周开始),也不是母语为英语的人。

我的目标是让我的Arduino机器人手臂(我的第一个版本非常简单)有些可编程,只是为了控制LCD并打开或关闭激光(到目前为止)。

顺便说一句,这只是模拟器,所以这就是为什么它永远不会发送任何串行数据。

下面是问题的代码片段,问题是当我在模拟器中“运行”的代码它似乎是一次检查所有的行,因为在它检查的代码,这是

LCD = hello 
laser = on 
LCD = 000 
laser = off 

只设置LCD 000,我查了激光=上单独代码之前,并没有在那里工作,但是当我在private void Form3_Load(object sender, EventArgs e)试了一下它的工作完美,所以底线的最后LCD命令每个代码的工作原理和激光代码从不起作用。

另外我想让每一行代表1秒,所以每行在它继续下一行之前会花费一秒钟的时间。

timer1间隔为1000(一秒)

private void timer1_Tick(object sender, EventArgs e) 
    { 

     int lineNumber = richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength); 


     string[] lines = File.ReadAllLines(openFileDialog1.FileName); 

     try 
     { 

      for (int i = 0; i < lineNumber; i++) 
      { 
       if (lines[i].Contains("LCD")) 
       { 
        label1.Text = lines[i].Remove(0, 6); 
       } 
       if (lines[i].Contains("laser") && lines[i].Contains("On")) 
       { 
        pictureBox4.Show(); 
       } 
       if (lines[i].Contains("laser") && lines[i].Contains("Off")) 
       { 
        pictureBox4.Hide(); 
       } 
       if (lines[i].Contains(".end")) 
       { 
        button2.PerformClick(); 
       } 

      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Form3", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
+0

您确定您的文件中有识别换行符吗?在阅读完行后放置一个断点,并且可以将鼠标悬停在“行”上查看其内容。 – MikeH 2014-11-06 22:35:36

回答

2

这里的问题是,你想把他们做你的代码的File.ReadAllLines()外面被调用一次,第二timer1_Tick()的代码。每当计时器打勾时,您就会读取整个文件,而您真正想要做的只是处理文件的一行。

+0

谢谢你的答案(我现在感觉很蠢),但是如果我把它放在定时器函数之外,我会得到一个错误,说“名称行不存在于当前的上下文中”,你可以如此友好地告诉我如何做到这一点。在此先感谢 – 2014-11-07 16:36:55

+0

@ olleolofsson - 不要这样 - 每个人都会犯错误。我会努力扩展我的答案,但那不会在明天之前。 – STLDeveloper 2014-11-07 22:48:14

+0

没有必要,我解决了它,现在它完全运行感谢所有的帮助:D – 2014-11-09 15:48:30