1

我似乎无法在整个网络中找到与此特定场景相关的任何问题/解决方案,所以我想我会详细介绍我使用 StreamReader 类型要实现的目标。

基本上我有2个行数不平衡的文件,即data1.txt包含20行,而data2.txt包含10行,所以我使用StreamReader首先从两个.txt文件中读取数据,我想我可以使用while (((ts.transaction = t.ReadLine()) !=null)||((ms.master = t.ReadLine()) !=null)) 从两个文件中读取总行数,然后我可以继续应用额外的逻辑,将我的数据合并到第三个文件中。

但是,当我在下面运行以下命令时,我遇到了“对象引用未设置为对象的实例”,可能是因为行数不平衡?当我替换“||”时它似乎有效 在带有“&&”的while语句中,但是我无法打印两个文件的总行数。

目前我只是将文本附加到richTextBox1,以便暂时测试我的数据输出。我在看是否有更好的方法可以使用 OR 子句,或者我是否会以正确的方式处理这个问题?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //Read Transaction File
    private void button1_Click(object sender, EventArgs e)
    {
        richTextBox1.Clear();
        StreamReader t = new StreamReader(@"c:\data1.txt");
        StreamReader m = new StreamReader(@"c:\data2.txt");

        transaction_storage ts = new transaction_storage();
        master_storage ms = new master_storage();

        while (((ts.transaction = t.ReadLine()) !=null)||((ms.master = t.ReadLine()) !=null))
        //while ((ts.transaction = t.ReadLine()) != null)
        {
            ms.m_index = Convert.ToInt32(ms.master.Substring(0, 2));

            ts.t_index = Convert.ToInt32(ts.transaction.Substring(0, 2));
            ts.t_name = ts.transaction.Substring(2, 10);
            ts.t_item = ts.transaction.Substring(10, 17);
            ts.t_amount = Convert.ToDouble(ts.transaction.Substring(ts.transaction.Length -7, 7));
            string transaction_data = (ts.t_index.ToString() + " " + ts.t_name + " " + ts.t_item + " " + ts.t_amount + "\n");
            string master_data = (ms.m_index.ToString());

            richTextBox1.AppendText(transaction_data);
            richTextBox1.AppendText(master_data);
        }

        t.Close();
        m.Close();

    }


    class master_storage
    {
        public int m_index;
        public string master;
    }

    class transaction_storage
    {

        public int t_index;
        public string t_name;
        public string t_item;
        public double t_amount;
        public string transaction;
    }

}

}

4

1 回答 1

3

只需先读取两个文件,然后使用简单的 for 循环执行逻辑:

var linesOfFile1 = File.ReadAllLines(@"c:\data1.txt");
var linesOfFile2 = File.ReadAllLines(@"c:\data2.txt");

for(int i = 0; i < Math.Min(linesOfFile1.Length, linesOfFile2.Length); i++) {
  //...
}
于 2013-03-24T02:11:06.447 回答