2014-09-28 36 views
-2

的线值我有一个文本文件,如下所示:创建一个函数来获取在C#

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(); 

我得到一个错误,说名称文件不在上下文中。

任何建议,非常感谢。

+0

您需要将namefile传递给您的函数。 – 2014-09-28 04:13:36

+0

namefile在您的Main函数中定义,并且您正试图在Returnval函数中访问它。您可以将'namefile'作为参数传递给Returnval。 – brz 2014-09-28 04:15:28

+0

就我所见,你有很多问题。最有问题的可能是您似乎认为NPSER可以用作变量名称,只是因为它被读为数据字符串。 C#不支持这种编程。 – RenniePet 2014-09-28 04:18:50

回答

2

Jdbaba,

如果我理解你的问题正确,你有一个变量范围的问题。由于您在Main方法中声明了namefile,因此只能在该方法中使用。如果你想其他方法中访问它,你将需要声明它的主要方法之外如下:

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) 

,但声明名称文件作为公共静态变量适用于您的测试项目。

祝你好运!

+0

StreamReader应该处于“使用”状态,因此它会被丢弃。 – RenniePet 2014-09-28 04:34:42

1

您应该添加TextReader作为参数传递给函数,如下所示:

public static string[] Returnval(TextReader nameFile, string a, string b, string c) 
{ 
    string line = nameFile.ReadLine(); 
    //All your other code 
} 

然后从主,你可以把它作为跟随,通过你的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 
} 

,然后使用从主称之为:

Returnval(nameFile, line.Split('\t'); 

凡串line包含NPSER, NASER, NQSER由制表符分隔。

相关问题