如何在按钮单击时读取csv文件中的下一行

时间:2015-02-11 17:23:23

标签: c++-cli

我有一个带有两个butttons和一个文本框的窗体。我的开始按钮读取csv文件中的第一行,并将我想要的数据输出到文本框中:

private: System::Void StartBtn_Click(System::Object^  sender, System::EventArgs^  e)
{ 
    String^ fileName = "same_para_diff_uprn1.csv";
    StreamReader^ din = File::OpenText(fileName);

    String^ delimStr = ",";
    array<Char>^ delimiter = delimStr->ToCharArray( );   
    array<String^>^ words;
    String^ str = din->ReadLine();

    words = str->Split( delimiter ); 

    textBox1->Text += gcnew String (words[10]);
    textBox1->Text += gcnew String ("\r\n"); 
    textBox1->Text += gcnew String (words[11]);
    textBox1->Text += gcnew String ("\r\n");
    textBox1->Text += gcnew String (words[12]);
    textBox1->Text += gcnew String ("\r\n");    
    textBox1->Text += gcnew String (words[13]);

然后我的下一个按钮&#39;我希望它清除文本框,并显示上面的下一行数据。然后,每当下一个按钮被提示时,文本框就会被清除,并显示csv文件的下一行。直到我到达文件的末尾。我该如何管理?

TIA

1 个答案:

答案 0 :(得分:0)

您的问题是button_click()函数在完成后会忘记StreamReader对象以及所有其他变量。
您需要使一些变量(至少din)独立于函数,将它们定义为WinForms对象的成员。无论何时调用该函数,都可以阅读下一行。你需要添加一个检查din是否为nullptr(第一次调用时是这样),然后加载文件,否则只需使用它:

StreamReader^ din;

private: System::Void StartBtn_Click(System::Object^  sender, System::EventArgs^  e)
{ 
    String^ fileName = "same_para_diff_uprn1.csv";
    if (!din)  // or: if (din == nullptr)
        din = File::OpenText(fileName);

    String^ delimStr = ",";
    ...