我有这个文本文件
688.63 C 1 C 0 0 0
698.70 C 1 C 0 0 0
708.89 C 1 C 0 0 0
716.78 C 1 C 0 0 0
718.97 C 1 C 0 0 0
728.27 C 1 C 0 0 0
728.89 C 1 C 0 0 0
738.82 C 1 C 0 0 0
759.00 C 1 C 0 0 0
问题是如何读取数组中的每一列??
如果我想访问列的特定值呢? 比如第一列的值2 ......
答案 0 :(得分:4)
您可以使用File.ReadAllLines
方法。
打开文本文件,读取文件的所有行,然后关闭 文件。
来自MSDN的示例;
string path = @"c:\temp\MyTest.txt";
string[] lines = File.ReadAllLines(path);
这将创建一个逐行保持字符串的数组。
如果我想要获取列的特定值呢?喜欢 第一列的值2
如果所有值之间的空格相同,则可以使用String.Split
方法;
string s = "688.63 C 1 C 0 0 0";
var array = s.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(array[1]); // Prints "C"
这里有 demonstration
。
在您的情况下,您可以使用;
var array = lines[1].Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(array[0]); // Prints "698.70"
line[1]
在你的文字中找到第二行,array[0]
获得此行698.70
的第一个值。
我希望它像这样打印688.63 698.70 708.89所有值的第一个 列不仅仅是第一个值。
您可以使用foreach
之类的;
string[] lines = File.ReadAllLines(path);
foreach(var line in lines)
{
var firstValue = line.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries)[0];
Console.WriteLine(firstValue);
}
答案 1 :(得分:3)
您可以使用File.ReadAllLines:
File.ReadAllLines返回一个数组。该数组包含一个字符串 指定文件中的每一行。我们使用这种方法。然后我们看 在其.NET Framework实现中,了解它的工作原理。它是 在System.IO命名空间中找到。 打开文本文件,读取文件的所有行,然后关闭 文件。
File.ReadAllLines方法不是低级实现。相反,它使用List和StreamReader类型,然后使用ToArray来返回数组。如果要将文件放入List中,这效率很低。
如果需要优化File.ReadAllLines调用,可以在其构造函数中估计List的容量,这会减少调整大小。如果你想保留List,你也可以避免使用ToArray。
使用this:
string[] records = File.ReadAllLines(path);
foreach(string record in records)
{
DataRow r = myDataTable.NewRow();
string[] fields = record.Split('\t');
/* Parse each field into the corresponding r column
* ....
*/
myDataTable.rows.Add(r);
}
答案 2 :(得分:0)
对此有更多答案
how to read text file specifications row and column in c#
How to properly read columns from text file
How to read a Chinese text file from C#?
您可以在Google中找到更多解决方案
答案 3 :(得分:0)
我想你需要two dimensional array
string[] lines = File.ReadAllLines("path");
string[][] myRecords = new string[lines.Count()+1][];
int k = 1;
foreach (var line in lines)
{
var values = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
for (int i = 1; i < values.Length; i++)
{
if (myRecords[k] == null) myRecords[k] = new string[values.Length+1];
myRecords[k][i] = values[i];
}
k++;
}
然后您可以访问一个值,例如第1行第3列:
myRecord[1][3]
答案 4 :(得分:0)
您可以创建一个Record类,然后使用简单的LINQ查询:
var records = File.ReadLines("file.txt")
.Select(line =>
{
string[] parts = line.Split('\t');
return new Record
{
column1 = int.Parse(parts[0]),
column2= parts[1],
column3= int.Parse(parts[2]),
column4= parts[3],
column5= int.Parse(parts[4]),
column6= int.Parse(parts[5]),
column7= int.Parse(parts[6])
};
}).ToArray();
这将为您提供一堆记录,原始文件中每行一个。然后您可以选择记录中的列,如下所示
var allColumn1s = records.Select(rec => rec.column1);