2014-11-06 91 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