在datagridview c#中读取两个文本文件并连接列
本文关键字:文本 两个 文件 连接 datagridview 读取 | 更新日期: 2023-09-27 18:12:33
我有两个这样的文本文件:
文本文件1:
Campionato;Data;Home;Away;HSFT;ASFT;HSHT;HSHT
DenDiv1;07.09.2015;Silkeborg;Helsingor;1;0;0;0
DenDiv1;06.09.2015;Naestved;Roskilde;1;1;0;0
DenDiv1;06.09.2015;Lyngby;Vejle;3;2;2;0
文本文件2:
Data;Home;Away;HODD;AODD
07.09.2015;Silkeborg;Helsingor;1.50;4.09;5.71
06.09.2015;Naestved;Roskilde;2.54;3.20;2.63
06.09.2015;Lyngby;Vejle;2.12;3.33;3.20
我需要加入并在datagridview中显示它们。你能帮我一下吗?谢谢!:)
我假设你已经有了这些类,或者你将创建
public class Data1
{
public string Campionato { get; set; }
public string Data { get; set; }
public string Home { get; set; }
public string Away { get; set; }
public int HSFT { get; set; }
public int ASFT { get; set; }
public int HSHT { get; set; }
public int HSHT2 { get; set; }
}
public class Data2 //you can use inheritance and reduce duplication of properties
{
public string Data { get; set; }
public string Home { get; set; }
public string Away { get; set; }
public double HODD { get; set; }
public double AODD { get; set; }
public double XODD { get; set; } //no name in sample
}
public class CombinedData //you can use inheritance here too
{
public string Campionato { get; set; }
public string Data { get; set; }
public string Home { get; set; }
public string Away { get; set; }
public int HSFT { get; set; }
public int ASFT { get; set; }
public int HSHT { get; set; }
public int HSHT2 { get; set; }
public double HODD { get; set; }
public double AODD { get; set; }
public double XODD { get; set; } //some name
}
你可以像这样读取原始数据
var data1 = File.ReadAllLines(@"C:'YourFolder'Data1.txt").ToList();
data1.RemoveAt(0); //reamoving the header
var data2 = File.ReadAllLines(@"C:'YourFolder'Data2.txt").ToList();
data2.RemoveAt(0); //reamoving the header
现在将它们映射到正确的(键入的)数据列表
var dataList1 = new List<Data1>();
foreach(var data in data1)
{
var columns = data.Split(';'); //add data validations
dataList1.Add(new Data1
{
Campionato = columns[0],
Data = columns[1],
Home = columns[2],
//other string properties
HSFT = int.Parse(columns[4])
//other int properties
});
}
var dataList2 = new List<Data2>();
foreach (var data in data2)
{
var columns = data.Split(';'); //add data validations
dataList2.Add(new Data2
{
Data = columns[0],
Home = columns[1],
//other string properties
HODD = double.Parse(columns[3])
//other double properties
});
}
现在你可以加入它们并绑定到你的网格中。
注意:这是对Data列的连接,这将导致总共5行。
var combinedDataList = from d1 in dataList1 //Joining on Data here, use the key you have
join d2 in dataList2 on d1.Data equals d2.Data
select new CombinedData { Campionato = d1.Campionato,
Data = d1.Data,
HSFT = d1.HSFT,
HODD = d2.HODD }; //map all properties
yourDataGrid.DataSource = combinedDataList; //check syntax here, not tested
yourDataGrid.Bind();
如果你想连接多个列(例如Data &Home),使用以下语法
var combinedDataList = from d1 in dataList1 //Joining on Data & Home, yields 3 rows
join d2 in dataList2 on new { d1.Data, d1.Home } equals new { d2.Data, d2.Home }
select new CombinedData
{
Campionato = d1.Campionato,
Data = d1.Data,
HSFT = d1.HSFT,
HODD = d2.HODD //map rest of the properties
};
数据类如下:
public class MyData
{
public String Campionato { get; set; }
public DateTime Data { get; set; }
public String Home { get; set; }
public String Away { get; set; }
public int Hsft { get; set; }
public int Asft { get; set; }
public int Hsht { get; set; }
public int Hsht_2 { get; set; }
public float Hodd { get; set; }
public float Aodd { get; set; }
public float Unknown { get; set; }
}
这里是读取文件和连接数据的代码:
var file1Data = File.ReadLines(@"File1.csv")
.Skip(1) // Skip header
.Select(line => line.Split(';'))
.Select(elements => new MyData
{
Campionato = elements[0],
Data = DateTime.ParseExact(elements[1], "MM'.'dd'.'yyyy", CultureInfo.InvariantCulture),
Home = elements[2],
Away = elements[3],
Hsft = Int32.Parse(elements[4]),
Asft = Int32.Parse(elements[5]),
Hsht = Int32.Parse(elements[6]),
Hsht_2 = Int32.Parse(elements[7])
});
var file2Data = File.ReadLines(@"File2.csv")
.Skip(1) // Skip header
.Select(line => line.Split(';'))
.Select(elements => new MyData
{
Data = DateTime.ParseExact(elements[0], "MM'.'dd'.'yyyy", CultureInfo.InvariantCulture),
Home = elements[1],
Away = elements[2],
Hodd = float.Parse(elements[3]),
Aodd = float.Parse(elements[4])
});
var joinedData = file1Data.Join(
file2Data,
// Key generation should be optimized. Maybe take a look at http://stackoverflow.com/q/263400/1838048
myData => myData.Data.GetHashCode() + myData.Home.GetHashCode() + myData.Away.GetHashCode(),
myData => myData.Data.GetHashCode() + myData.Home.GetHashCode() + myData.Away.GetHashCode(),
(file1, file2) => new MyData
{
Campionato = file1.Campionato,
Data = file1.Data,
Home = file1.Home,
Away = file1.Away,
Hsft = file1.Hsft,
Asft = file1.Asft,
Hsht = file1.Hsht,
Hsht_2 = file1.Hsht_2,
Hodd = file2.Hodd,
Aodd = file2.Aodd,
Unknown = file2.Unknown
});
myDataGridView.DataSource = joinedData.ToList();
有很多硬编码的东西,没有任何类型的错误检查。所以对你自己有很大的改进,但它应该给你一个很好的起点。