我的程序当前从.HRM格式的文本文件中读取值,并根据包含数据的列解析它们,并将数据插入到相应的行中。我目前将在代码和下面的代码中读取的代码我试图将代码放入一个列表然后插入到datagridview中,但我认为由于没有正确设置数组而我做错了,因为我不是确定它如何在列之间分割,以及如何决定数据插入哪一行datagridview。这是我用来加载文件的代码:
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
{
string filePath = @"F:\testdata.hrm";
if (File.Exists(filePath))
processfile(filePath);
else
System.Console.WriteLine("Error - File {0} not Found", filePath);
System.Console.ReadKey();
}
}
// static void processfile(String filePath)
// {
// List<string[]> result = File.ReadAllLines("filePath") //read all lines in the file
// .SkipWhile(x => x != "[HRData]") //skip lines until reaching the "[HRData]"
// .Select(x => x.Split(null, StringSplitOptions.RemoveEmptyEntries)) //split line by whitespace to get numbers in line
// .ToList(); // convert the result to a list
// result.ForEach(x => dataGridView1.Rows.Add(x));
}
}
}
这是我正在阅读的数据:
[HRData]
91 154 70 309 83 6451
91 154 70 309 83 6451
92 160 75 309 87 5687
94 173 80 309 87 5687
96 187 87 309 95 4662
100 190 93 309 123 4407
101 192 97 309 141 4915
103 191 98 309 145 5429
106 190 99 309 157 4662
106 187 98 309 166 4399
107 186 97 309 171 4143
107 185 97 309 170 4914
108 184 96 309 171 5426
108 183 95 309 170 5688
所以我想要做的是读取文件中的每一列,然后将每列添加到每个列的单独数组中,然后将它们插入到相应列中的datagridview中。我试图对此进行编码,但我不确定我做错了什么,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
你可以这样做:
var lines = File.ReadAllLines(@"F:\testdata.hrm").Skip(1);
foreach (var line in lines)
dataGridView1.Rows.Add(line.Split(
new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
修改强>
根据您的评论,您希望将行旋转到列,将列旋转到行。你可以这样做:
var lines = File.ReadAllLines(@"F:\testdata.hrm").Skip(1);
List<string[]> list = new List<string[]>();
foreach (var line in lines)
{
list.Add(line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
}
for (int i = 0; i < 6; i++)
{
List<string> cols = new List<string>();
for (int j = 0; j < list.Count; j++)
{
cols.Add(list[j][i]);
}
dataGridView1.Rows.Add(cols.ToArray());
}
将标题添加到行:
List<string> rowHeaders = new List<string> { "A", "B", "C", "D", "E", "F", "G" };
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].HeaderCell.Value = rowHeaders[i];
}
答案 1 :(得分:0)
看起来你正在将Linq实现为C#代码?此外,您希望将每个列分隔为自己的数组,但是您只声明了一个数组?如果您希望每列都有自己的数组,则需要声明多个数组,或者需要声明一个三维数组。我建议使用foreach循环:
foreach(string column in filepath)
{
string[] result = File.ReadAllLines("filePath");
string dataColumn = dataGridView1.Rows.Add(result));
}