4 c#
我有一个制表符分隔的文件,其中包含一些列和行,例如:某些行可能没有某些列的值。我们所知道的是“顺序”不会改变,所以第三个制表符分隔的东西总是用于 Column3 等等。
Column1 Column2 Column3 .... Column12 .... Column34 ... Column50
123 34 ABC
234 DEF as@ddd.com True
45 NYC wwe@dsds.com False
Run Code Online (Sandbox Code Playgroud)
现在我需要阅读这个文件,但并不是所有的列对我的程序都很重要。例如,我只需要对 Column2、Column12、Column45 中的值做一些事情
你建议什么方法?
尝试以下方法
static void Main(string[] args)
{
DataTable datatable = new DataTable();
StreamReader streamreader = new StreamReader(@"C:\Temp\txt.txt");
char[] delimiter = new char[] { '\t' };
string[] columnheaders = streamreader.ReadLine().Split(delimiter);
foreach (string columnheader in columnheaders)
{
datatable.Columns.Add(columnheader); // I've added the column headers here.
}
while (streamreader.Peek() > 0)
{
DataRow datarow = datatable.NewRow();
datarow.ItemArray = streamreader.ReadLine().Split(delimiter);
datatable.Rows.Add(datarow);
}
foreach (DataRow row in datatable.Rows)
{
Console.WriteLine(""----Row No: " + datatable.Rows.IndexOf(row) + "----"");
foreach (DataColumn column in datatable.Columns)
{
//check what columns you need
if (column.ColumnName == "Column2" ||
column.ColumnName == "Column12" ||
column.ColumnName == "Column45")
{
Console.Write(column.ColumnName);
Console.Write(" ");
Console.WriteLine(row[column]);
}
}
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
不要自己卷。有……微妙之处并不会立即显现出来。其中:
相反,使用来自CodeProject 的Sebastien Lorion 最优秀的Fast CSV Reader之类的东西。
编辑注意:尽管名称如此,但它是用于分隔文本文件的通用阅读器。可配置项包括
您可以使用File.ReadLines()方法(如果您使用的是 .NET Framework 版本 4.0 或更高版本),而不会造成任何性能损失,因为它不会将整个文件内容加载到内存中。
尝试这个:
using System.IO;
class FileData
{
public string Column2{ get; set; }
public string Column12{ get; set; }
public string Column45{ get; set; }
}
List<FileData> filedata = new List<FileData>();
FileData temp = new FileData();
foreach(var line in File.ReadLines("filepath.txt").Skip(1))
{
var tempLine = line.Split('\t');
temp.Column2 = tempLine[1];
temp.Column12 = tempLine[11];
temp.Column45 = tempLine[44];
filedata.Add(temp);
}
Run Code Online (Sandbox Code Playgroud)
var list = from row in System.IO.File.ReadLines("file.txt")
let arr = row.Split('\t')
select new Tuple<string, string, string>(arr[2], arr[12], arr[45]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25581 次 |
| 最近记录: |