将文本文件数据加载到特定长度场景的数据 table
Load text file data into data table for specific length scenario
我有一个文本文件,其中包含许多不相关的值,然后我将这些值加载到 table 中。文件示例如下所示
Some file description date
C D 8989898989898 some words
D F 8979797979 some more words
8 H 98988989989898 Some more words for the purpose
KD978787878 280000841 1974DIAA EIDER 320
KK967867668 280000551 1999OOOD FIDERN 680
无法从行数开始,因为描述部分(4行,不包括空行)可以是多行。也就是说,每个文本文件最多可以有 40-50 行。
我能想到的唯一选择数据的方法是 select 只有那些有 5 列并且它们之间有一定数量 space 的行。
我尝试过使用 foreach 循环,但效果不是很好。可能是我无法实现它。
DataTable dt = new DataTable();
using (StreamWriter sw = File.CreateText(path))
{
string[] rows = content.Split('\n');
foreach (string s in rows)
{
// how to pick up rows when there are only 5 columns in a row separated by a definite number of space?
string[] columns = s.Split(' '); // how to calculate exact spaces here, because space count could be different from one column to the other. Ex: difference between first column and second is 16 and second to third is 8.
foreach (string t in columns)
{
}
}
}
这是使用正则表达式仅查找满足您需要的行甚至正确分组它们的理想场所,您已经可以得到五列的修剪值。
搜索表达式似乎类似于 "^(K[A-Z0-9]+) +([0-9]+) +([A-Z0-9]+) +([A-Z]+) +( [0-9]+) *$" 或类似的。了解正则表达式对我编程有很大帮助。
其中很多归结为整理和清理数据(糟糕!)我会:
1.Use String.Split 在内容上获取所有行(就像您所做的那样)
string[] lines = content.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
2.Parse 输出空行并遍历结果
foreach(string line in lines.Where(x => !String.IsNullOrEmpty(x.Trim())))
3.Use String.Split 在每一行上拆分特定行的每个字段,剥离白色 space
string[] fields = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
此时您可以计算行中的字段数或在每个实际字段上扔东西。
我有一个文本文件,其中包含许多不相关的值,然后我将这些值加载到 table 中。文件示例如下所示
Some file description date
C D 8989898989898 some words
D F 8979797979 some more words
8 H 98988989989898 Some more words for the purpose
KD978787878 280000841 1974DIAA EIDER 320
KK967867668 280000551 1999OOOD FIDERN 680
无法从行数开始,因为描述部分(4行,不包括空行)可以是多行。也就是说,每个文本文件最多可以有 40-50 行。
我能想到的唯一选择数据的方法是 select 只有那些有 5 列并且它们之间有一定数量 space 的行。
我尝试过使用 foreach 循环,但效果不是很好。可能是我无法实现它。
DataTable dt = new DataTable();
using (StreamWriter sw = File.CreateText(path))
{
string[] rows = content.Split('\n');
foreach (string s in rows)
{
// how to pick up rows when there are only 5 columns in a row separated by a definite number of space?
string[] columns = s.Split(' '); // how to calculate exact spaces here, because space count could be different from one column to the other. Ex: difference between first column and second is 16 and second to third is 8.
foreach (string t in columns)
{
}
}
}
这是使用正则表达式仅查找满足您需要的行甚至正确分组它们的理想场所,您已经可以得到五列的修剪值。 搜索表达式似乎类似于 "^(K[A-Z0-9]+) +([0-9]+) +([A-Z0-9]+) +([A-Z]+) +( [0-9]+) *$" 或类似的。了解正则表达式对我编程有很大帮助。
其中很多归结为整理和清理数据(糟糕!)我会:
1.Use String.Split 在内容上获取所有行(就像您所做的那样)
string[] lines = content.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
2.Parse 输出空行并遍历结果
foreach(string line in lines.Where(x => !String.IsNullOrEmpty(x.Trim())))
3.Use String.Split 在每一行上拆分特定行的每个字段,剥离白色 space
string[] fields = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
此时您可以计算行中的字段数或在每个实际字段上扔东西。