我有包含数字列的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);
}
答案 0 :(得分:3)
您可以使用Skip
+ Take
和String.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]
之下。
顺便说一句。你当前的代码有无限循环...