fc2ブログ

トップ  >  サンプルソース  >  CSVファイル差分(C#/VB.NET)

CSVファイル差分(C#/VB.NET)

2010年05月29日

CSVファイルを比較してセル単位の差分を表示するサンプル(ソース/コード)です。まずCSVファイルを行単位に分割し、次にセル単位に分割し比較します。そして変更があるセルの色を変更しています。

画面イメージを貼って置きます。
CVSファイル差分

ちなみに、テキストファイルの行単位差分のサンプルはこちらです。
テキストファイル比較(C#/VB.NET)

' --------------------------------------------------------
' CSVファイルの差分を表示するサンプル(VB.NET/VS2005)
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    ' CSVファイル読込
    Dim sr0 As IO.StreamReader = _
        New IO.StreamReader("D:\Temp\TestCsv1.txt", _
        Encoding.GetEncoding("Shift-JIS"))
    Dim sr1 As IO.StreamReader = _
        New IO.StreamReader("D:\Temp\TestCsv2.txt", _
        Encoding.GetEncoding("Shift-JIS"))
    Dim dt0 As String = sr0.ReadToEnd()
    Dim dt1 As String = sr1.ReadToEnd()
    sr0.Close()
    sr1.Close()

    ' 変更前のデータを行単位分割
    dt0 = dt0.Replace(vbCrLf, vbLf)
    Dim row0() As String = dt0.Split(vbLf)
    If row0(row0.Length - 1) = "" Then
        Array.Resize(Of String)(row0, row0.Length - 1)
    End If
    ' 変更後のデータを行単位分割
    dt1 = dt1.Replace(vbCrLf, vbLf)
    Dim row1() As String = dt1.Split(vbLf)
    If row1(row1.Length - 1) = "" Then
        Array.Resize(Of String)(row1, row1.Length - 1)
    End If

    ' 変更前後の行数を合わせる
    If row0.Length > row1.Length Then
        Array.Resize(Of String)(row1, row0.Length)
    ElseIf row0.Length < row1.Length Then
        Array.Resize(Of String)(row0, row1.Length)
    End If

    ' CSVファイルの差分表示
    DataGridView1.Rows.Clear()
    For i As Integer = 0 To row0.Length - 1
        DataGridView1.Rows.Add()
        Dim cel0 As String()
        Dim cel1 As String()
        ' 変更前の行データをセル単位分割
        row0(i) = row0(i) & ",,,,"
        cel0 = row0(i).Split(",")
        Array.Resize(Of String)(cel0, 5)
        ' 変更後の行データをセル単位分割
        row1(i) = row1(i) & ",,,,"
        cel1 = row1(i).Split(",")
        Array.Resize(Of String)(cel1, 5)

        For j As Integer = 0 To cel1.Length - 1
            ' 変更後データのセルデータ表示
            DataGridView1(j, i).Value = cel1(j)
            ' 変更前後のセルデータ比較
            If cel0(j) <> cel1(j) Then
                ' 変更セルの色変更
                DataGridView1(j, i).Style.BackColor = _
                    Color.LightSkyBlue
            End If
        Next
    Next
End Sub
' --------------------------------------------------------

// -------------------------------------------------------
// CSVファイルをの差分を表示するサンプル(VB.NET/VS2005)
private void Button1_Click(object sender, EventArgs e)
{
    // CSVファイル読込
    System.IO.StreamReader sr0 =
        new System.IO.StreamReader(
        @"D:\Temp\TestCsv1.txt",
        Encoding.GetEncoding("Shift-JIS"));
    System.IO.StreamReader sr1 =
        new System.IO.StreamReader(
        @"D:\Temp\TestCsv2.txt",
        Encoding.GetEncoding("Shift-JIS"));
    String dt0 = sr0.ReadToEnd();
    String dt1 = sr1.ReadToEnd();
    sr0.Close();
    sr1.Close();

    // 変更前のデータを行単位分割
    dt0 = dt0.Replace("\r\n", "\r");
    String[] row0 = dt0.Split('\r');
    if (row0[row0.Length - 1] == "")
    {
        Array.Resize<String>(ref row0, row0.Length - 1);
    }
    // 変更後のデータを行単位分割
    dt1 = dt1.Replace("\r\n", "\r");
    String[] row1 = dt1.Split('\r');
    if (row1[row1.Length - 1] == "")
    {
        Array.Resize<String>(ref row1, row1.Length - 1);
    }

    // 変更前後の行数を合わせる
    if (row0.Length > row1.Length)
    {
        Array.Resize<String>(ref row1, row0.Length);
    }
    else if (row0.Length < row1.Length)
    {
        Array.Resize<String>(ref row0, row1.Length);
    }

    // CSVファイルの差分表示
    DataGridView1.Rows.Clear();
    for (int i = 0; i <= row0.Length - 1; i++)
    {
        DataGridView1.Rows.Add();
        String[] cel0;
        String[] cel1;
        // 変更前の行データをセル単位分割
        row0[i] = row0[i] + ",,,,";
        cel0 = row0[i].Split(',');
        Array.Resize<String>(ref cel0, 5);
        // 変更後の行データをセル単位分割
        row1[i] = row1[i] + ",,,,";
        cel1 = row1[i].Split(',');
        Array.Resize<String>(ref cel1, 5);

        for (int j = 0; j <= cel1.Length - 1; j++)
        {
            // 変更後データのセルデータ表示
            DataGridView1[j, i].Value = cel1[j];
            // 変更前後のセルデータ比較
            if (cel0[j] != cel1[j])
            {
                // 変更セルの色変更
                DataGridView1[j, i].Style.BackColor =
                    Color.LightSkyBlue;
            }
        }
    }
}
// -------------------------------------------------------

DataGridView 小技メモ(C#/VB.NET) | トップページへ戻る | メモリ空き容量(C#/VB.NET)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る