将 space 分隔文件导入 DataGridView
Importing a space delimited file into a DataGridView
我希望将以下数据导入 DataGridView
:
01-29-15 04:04AM 505758360 examplefilename1.zip
01-28-15 12:28AM 501657000 this_is_another_file.zip
01-29-15 02:27AM 1629952132 random.data.for.example.zip
此数据未由特定字符数或任何字符分隔。我需要将此数据导入 DataGridView
,我有以下代码:
public void LoadDataToGrid(string pProfile)
{
string[] lvTextData = File.ReadAllLines(Global.lvPath + @"\" + pProfile + ".txt");
DataTable dtTextData = new DataTable();
dtTextData.Columns.Add("Company Name", typeof(string));
dtTextData.Columns.Add("Size", typeof(string));
dtTextData.Columns.Add("File Name", typeof(string));
dtTextData.Columns.Add("Last Upload", typeof(string));
for(int i=1; i < lvTextData.Length; i++)
dtTextData.Rows.Add(lvTextData[i].Split());
grdData.DataSource = dtTextData;
}
数据很好,但只在一列中,我该如何更改列宽的定义?
您的代码(以及您提供的数据)似乎存在一些问题:
拆分字符串时
01-29-15 04:04AM 505758360 examplefilename1.zip
它将它拆分为一个 Length == 16
的字符串数组(因为它拆分了所有空白字符)。但是您只提供 4 列。所以你想把一个16个字符串的数组放到4列,这显然做不到。
一件简单的事情是:删除输入字符串的多余空格 Regex.Replace(s, "\s+, " ");
。 (您也可以正则表达式解析字符串并将其分成组)。然后你可以用空格分割你的字符串,你会得到一个 Length == 4
的字符串数组
对于您的示例(尽管您的输入数据显然与您的列名称不对应):
for (int i = 1; i < lvTextData.Length; i++)
{
// removes redundant whitespaces
string removedWhitespaces = Regex.Replace(lvTextData[i], "\s+", " ");
// splits the string
string[] splitArray = removedWhitespaces.Split(' ');
// [0]: 01-29-15
// [1]: 04:04AM
// [2]: 505758360
// [3]: examplefilename1.zip
// do some kind of length checking here
if(splitArray.Length == dtTextData.Columns.Count)
{
dtTextData.Rows.Add(splitArray);
}
}
你甚至可以寻找 CSV Reader - if you are using NuGet look here
它还会自动处理尾随/结尾的空格。请记住,您必须指定 '\t' 或 ' ' 作为分隔符。
void ReadAndBindCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv = new CsvReader(
new StreamReader("data.csv"), true))
{
csv.TrimSpaces = true;
grdData.DataSource = csv;
}
}
我希望将以下数据导入 DataGridView
:
01-29-15 04:04AM 505758360 examplefilename1.zip
01-28-15 12:28AM 501657000 this_is_another_file.zip
01-29-15 02:27AM 1629952132 random.data.for.example.zip
此数据未由特定字符数或任何字符分隔。我需要将此数据导入 DataGridView
,我有以下代码:
public void LoadDataToGrid(string pProfile)
{
string[] lvTextData = File.ReadAllLines(Global.lvPath + @"\" + pProfile + ".txt");
DataTable dtTextData = new DataTable();
dtTextData.Columns.Add("Company Name", typeof(string));
dtTextData.Columns.Add("Size", typeof(string));
dtTextData.Columns.Add("File Name", typeof(string));
dtTextData.Columns.Add("Last Upload", typeof(string));
for(int i=1; i < lvTextData.Length; i++)
dtTextData.Rows.Add(lvTextData[i].Split());
grdData.DataSource = dtTextData;
}
数据很好,但只在一列中,我该如何更改列宽的定义?
您的代码(以及您提供的数据)似乎存在一些问题:
拆分字符串时
01-29-15 04:04AM 505758360 examplefilename1.zip
它将它拆分为一个 Length == 16
的字符串数组(因为它拆分了所有空白字符)。但是您只提供 4 列。所以你想把一个16个字符串的数组放到4列,这显然做不到。
一件简单的事情是:删除输入字符串的多余空格 Regex.Replace(s, "\s+, " ");
。 (您也可以正则表达式解析字符串并将其分成组)。然后你可以用空格分割你的字符串,你会得到一个 Length == 4
对于您的示例(尽管您的输入数据显然与您的列名称不对应):
for (int i = 1; i < lvTextData.Length; i++)
{
// removes redundant whitespaces
string removedWhitespaces = Regex.Replace(lvTextData[i], "\s+", " ");
// splits the string
string[] splitArray = removedWhitespaces.Split(' ');
// [0]: 01-29-15
// [1]: 04:04AM
// [2]: 505758360
// [3]: examplefilename1.zip
// do some kind of length checking here
if(splitArray.Length == dtTextData.Columns.Count)
{
dtTextData.Rows.Add(splitArray);
}
}
你甚至可以寻找 CSV Reader - if you are using NuGet look here
它还会自动处理尾随/结尾的空格。请记住,您必须指定 '\t' 或 ' ' 作为分隔符。
void ReadAndBindCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv = new CsvReader(
new StreamReader("data.csv"), true))
{
csv.TrimSpaces = true;
grdData.DataSource = csv;
}
}