この特定のシナリオに関連する質問/解決策をWeb全体で見つけることができないように思われるので、StreamReaderタイプを使用して達成しようとしていることの内訳を示したいと思いました。
基本的に、行数が不均衡な2つのファイルがあります。つまり、data1.txtには20行が含まれ、data2.txtには10行が含まれているため、StreamReaderを使用して最初に両方の.txtファイルからデータを読み取り、しばらくの間使用できると考えていました。 (((ts.transaction = t.ReadLine())!= null)||((ms.master = t.ReadLine())!= null))両方のファイルから合計行を読み取ると、続行できます追加のロジックを適用して、データを3番目のファイルにマージします。
しかし、以下を実行すると、おそらく行数が不均衡であるために、「オブジェクトのインスタンスに設定されていないオブジェクト参照」が発生しますか?「||」を置き換えるとうまくいくようです 「&&」を含む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;
}
}
}