[我在这里尝试将“ +”之前的.txt文件文本数据导入到Datagridview中,例如,从我的文本文件中,我只想打印35和219,但是问题是我的.txt文件的第一行显示在标题栏中。
文本文件
35 ++++++ 201103abf41402e31ce7568f5327681f66219 +++++ 2011028223694803a611a982a4cb6fa9f8
代码
private void browsebtn_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
pathtxtbox.Text = ofd.FileName;
readtextfile();
}
}
private void readtextfile()
{
System.IO.StreamReader file = new System.IO.StreamReader(@"path of textfile");
string[] colnames = file.ReadLine().Split('\n');
DataTable dt = new DataTable();
dt.Columns.Add("NCP Data");
foreach (string col in colnames)
{
dt.Columns.Add(col);
}
string newline;
while ((newline = file.ReadLine()) != null)
{
DataRow dr = dt.NewRow();
string[] values = newline.Split(' ');
for (int i = 0; i < values.Length; i++)
{
//dr[i] = values[i];
dr[i] = values[i].Substring(0, values[i].IndexOf('+'));
}
dt.Rows.Add(dr);
}
file.Close();
dataGridView1.DataSource = dt;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
[请有人帮我解决问题。谢谢!
您的代码期望第一行包含列标题!
string[] colnames = file.ReadLine().Split('\n');
这会将文件的第一行与第一行的内容拆分为一列。
首先,我将其更改为与用于文件内容的鉴别符相匹配:
string[] colnames = file.ReadLine().Split('+');
但是这仍将文件的第一行用作列标题。如果您想对代码进行硬编码而对代码的更改最少,则可以执行以下操作:
string[] colnames = "Id+col1+col2+col3+col4+col5+UUID".Split('+');
或者,如果您根本不需要动态列名,请尝试使用此较短的版本:
private void readtextfile()
{
System.IO.StreamReader file = new System.IO.StreamReader(@"path of textfile");
DataTable dt = new DataTable();
dt.Columns.Add("NCP Data");
string newline;
while ((newline = file.ReadLine()) != null)
{
DataRow dr = dt.NewRow();
string[] values = newline.Split('+');
for (int i = 0; i < dt.Columns.Length; i++) // leaving dynamic column code here for use later...
{
dr[i] = values[i];
}
dt.Rows.Add(dr);
}
file.Close();
dataGridView1.DataSource = dt;
}
我在表列上保留了for循环,以帮助说明原始源脚本和您今天试图通过固定的单列实现的区别。