从文件中读取列

时间:2014-02-01 18:57:34

标签: c# text multiple-columns

我有包含数字列的test.prp文件。我在下面添加了它。我想从第3行到第6行读取第二和第三列,并将它们写入dene.txt。第一栏出问题。我怎么能用c#代码做到这一点?我还添加了我的代码。

文件内容:

   1
  41
   1    0.0000000000E+00    0.1000000000E+00    0.2000000000E+02    0.3901678858E+00    0.0000000000E+00    0.0000000000E+00    0.1512811745E-04    0.9999999999E+00    0.0000000000E+00    0.0000000000E+00    0.0000000000E+00    0.1000000000E+01    0.9999999999E+00   -0.1512811745E-04    0.0000000000E+00
 973    0.3925981578E-02    0.9992290362E-01    0.2000000000E+02    0.3901543748E+00    0.0000000000E+00    0.0000000000E+00    0.3927493226E-01    0.9992284422E+00    0.0000000000E+00    0.0000000000E+00    0.0000000000E+00    0.1000000000E+01    0.9992284422E+00   -0.3927493226E-01    0.0000000000E+00
 975    0.7845909576E-02    0.9969173337E-01    0.2000000000E+02    0.3901465010E+00    0.0000000000E+00    0.0000000000E+00    0.7847417723E-01    0.9969161467E+00    0.0000000000E+00    0.0000000000E+00    0.0000000000E+00    0.1000000000E+01    0.9969161467E+00   -0.7847417723E-01    0.0000000000E+00
 977    0.1175373975E-01    0.9930684570E-01    0.2000000000E+02    0.3899423873E+00    0.0000000000E+00    0.0000000000E+00    0.1175524208E+00    0.9930666787E+00    0.0000000000E+00    0.0000000000E+00    0.0000000000E+00    0.1000000000E+01    0.9930666787E+00   -0.1175524208E+00    0.0000000000E+00

文件结尾

以下代码:

string oku = File.ReadAllText("test.prp");
while (oku != null)
{
    oku = oku.Remove(4, 4);

    File.WriteAllText("dene.txt", oku);
}

3 个答案:

答案 0 :(得分:3)

您可以使用Skip + TakeString.Split + String.Join

File.WriteAllLines("dene.txt", File.ReadLines("test.prp")
    .Skip(2).Take(4)
    .Select(l => string.Join(" ", l.Split().Skip(1).Take(2))));

我不知道分隔符所以我假设了一个空格

答案 1 :(得分:1)

为什么不将文件读入string[]数组,然后使用string.Split分隔符将<space>每行读取。

string[] oku = File.ReadAllLines("test.prp");
foreach(string sLine in oku)
{
    string[] columns = sLine.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

    // Check for columns here.
    if (columns.Length >= 2)
    {
        string col2_and_3 = columns[1]+" "+colunms[2];

        // Do something with col2_and_3
   }
}
然后

string[] columns将获得每行的所有数据,您可以使用columns.Length查看是否有您需要的额外列。

答案 2 :(得分:1)

string[] oku = File.ReadAllLines("Input.txt");
string[][] cells = oku.Select(x => x.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToArray()).ToArray();

现在,您可以轻松获得所需的行/列,例如第3行,第2栏:

var value = cells[2][1];

请记住,数组是从0建立索引的,因此第二列实际上位于[1]之下。

顺便说一句。你当前的代码有无限循环...