2016-02-05 53 views
0

我正在编写一个flesch索引计算器,我希望能够使用控制台命令和.exe本身启动我的程序。我想用命令fleschIndexCalc.exe -f "path of the file"在控制台读入.txt文件,然后可以选择英文文本的参数-e或德文文本-g的计算公式。检查控制台中是否已经选择参数

当我用控制台命令启动它时:我自己输入参数。

当我用.exe启动它时:该程序要求的语言,我只需要编写ge并按enter

现在我的问题:我怎样才能告诉我的程序,而开始与控制台,我已经选择了语言,所以它不会再问我,就像我用.exe启动它?

这里就是我的了:

(如果你需要更多的代码从我FleschScore.cs问它:))

namespace Flesch_Reading_Ease 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      string fileName = string.Empty; 
      string[] parameters = new string[] { "-f", "-g", "-e" }; 


      Console.WriteLine("Flesch Reading Ease"); 
      Console.WriteLine(""); 


      if (args.Length == 0) 
      { 
       Console.ForegroundColor = ConsoleColor.Red; 
       Console.WriteLine("error!"); 
       Console.ResetColor(); 
       Console.WriteLine("no file found!"); 
       Console.WriteLine(""); 
       Console.Write("press any key..."); 
       Console.ReadKey(); 
       return; 
      } 

      foreach (string arg in args) 
      { 
       //------- WHAT TO WRITE HERE? ------- 
      } 

      fileName = args[0]; 

      FleschScore fs = new FleschScore(fileName); 
      fs.Run(); 
     } 
    } 
} 

我的方法来选择不同的语言看起来是这样的:

private void SelectLanguage() 
     { 
      do 
      { 
       Console.WriteLine("choose language:"); 
       Console.WriteLine("- german(g)"); 
       Console.WriteLine("- english(e)"); 

       string lang = Console.ReadLine(); 
       switch (lang.ToUpper()) 
       { 
        case "D": 
         _selectedLanguage = Language.German; 
         break; 

        case "E": 
         _selectedLanguage = Language.English; 
         break; 

        default: 
         _selectedLanguage = Language.Undefined; 
         Console.WriteLine("wrong input. Enter viable letter."); 
         Console.WriteLine(""); 
         break; 
       } 
      } while (_selectedLanguage == Language.Undefined); 
     } 
+0

如果你启动它的* .EXE您args.Length == 2,如果你从控制台启动您的args.Length> 2,如果我得到你的权利 –

+0

我不能看到你的程序要求语言选项。 – Steve

+0

好点@Steve ...如果你以exe开头,你如何得到文件路径? –

回答

4

您基本上遍历所有参数并跟踪已经输入的内容。之后,你会检查你是否拥有你需要的所有信息,并将所有参数作为参数传递给任何方法/类需要它。

bool isGerman = false; 
bool isEnglish = false; 
bool nextEntryIsFileName = false; 
string filename = null; 

foreach (string arg in args) 
{ 
    switch (arg) 
    { 
     case "-e": 
      isEnglish = true; 
      nextEntryIsFileName = false; 
      break; 
     case "-g": 
      isGerman = true; 
      nextEntryIsFileName = false; 
      break; 
     case "-f": 
      nextEntryIsFileName = true; 
      break; 
     default: 
      if (nextEntryIsFileName) 
      { 
       filename = arg; 
       nextEntryIsFileName = false; 
      } 
      break; 
    } 
} 

if (!(isEnglish^isGerman)) 
{ 
    // Select language 
} 

if (String.IsNullOrEmpty(filename)) 
{ 
    // Ask for filename 
} 

var language = ... 

FleschScore fs = new FleschScore(language, fileName); 
fs.Run(); 
+0

'if(!(isEnglish^isGerman))'做了什么?什么是^? – user5462581

+1

这是一个独家或。它检查两个布尔值中的一个是否为真,但不是两者都是。因此,如果有人通过'-e' _和_'-g',它还会要求选择一种语言,以及两者都没有通过时。 – Mark