我有一个文本文件如下:
NPSER NASER NQSER
10 5 3
JPNM EPNS RNPS
12 10 11
ACBE MNEF QPNS
25 11 78
这是我的长数据的简化数据。我想自动找到NPSER,NASER,NQSER等的值。
到目前为止,我的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace read_file
{
class Program
{
static void Main(string[] args)
{
TextReader namefile = new StreamReader(@"E:\Code in C Sharp\read-file\read-file\test.txt");
string line = namefile.ReadLine();
Console.WriteLine(line);
Console.ReadLine();
////Read second line
string line1 = namefile.ReadLine();
Console.WriteLine(line1);
Console.ReadLine();
}
static public string[] Returnval(string line)
{
var Returnval = line.Split('\t');
return Returnval;
}
}
}
我创建了一个函数Returnval,它拆分了制表符分隔的字符串。我想修改这个自动将新行作为输入的函数然后我应该能够使用这样的函数:
Returnval(NPSER, NASER, NQSER)
我尝试在Returnval函数中添加一个新行,如下所示:
string line = namefile.Readline();
我收到一条错误,说namefile不在上下文中。
任何建议都非常感谢。
答案 0 :(得分:2)
Jdbaba,
如果我正确理解您的问题,您就会遇到可变范围问题。由于您在Main方法中声明了namefile,因此它只能在该方法中使用。如果要在另一个方法中访问它,则需要在Main方法之外声明它,如下所示:
public static TextReader _namefile;
static void Main(string[] args)
{
_namefile = new StreamReader(@"E:\Code in C Sharp\read-file\read-file\test.txt");
string line = _namefile.ReadLine();
Console.WriteLine(line);
Console.ReadLine();
////Read second line
string line1 = _namefile.ReadLine();
Console.WriteLine(line1);
Console.ReadLine();
}
static public string[] Returnval(string line)
{
string line1 = _namefile.ReadLine();
var Returnval = line.Split('\t');
return Returnval;
}
将对象作为参数传递给第二种方法(如
)通常会更好Returnval(namefile, NPSER, NASER, NQSER)
,但将namefile声明为公共静态变量适用于您的测试项目。
祝你好运!
答案 1 :(得分:1)
您应该将TextReader
作为参数添加到您的函数中,如下所示:
public static string[] Returnval(TextReader nameFile, string a, string b, string c)
{
string line = nameFile.ReadLine();
//All your other code
}
然后从main调用它,如下所示,传递StreamReader:
Returnval(nameFile, NPSER, NASER, NQSER);
请注意,阅读包含NPSER, NASER, NQSER
的行并不会自动为您创建这些变量。但是,由于它们都是字符串,因此您可能会再次修改您的函数:
public static string[] Returnval(TextReader nameFile, string[] myStrings)
{
string line = nameFile.ReadLine();
//All your other code
}
然后使用以下方法从main调用它:
Returnval(nameFile, line.Split('\t');
字符串line
包含由标签分隔的NPSER, NASER, NQSER
。