2008-11-25 27 views
19

Làm cách nào để phát hiện đầu vào cho ứng dụng bảng điều khiển trong C#?C#: Làm cách nào để phát hiện các đối số được nhập vào ứng dụng bảng điều khiển?

Hãy nói ví dụ tôi muốn ứng dụng giao diện điều khiển khởi động bằng cách viết: Welcome To Thực phẩm Hut (con trỏ để gõ những thứ ở đây sau khi dòng đầu tiên)

tôi muốn các ứng dụng giao diện điều khiển để phát hiện hai lệnh :

1:/help - sẽ hiển thị một số trợ giúp vô nghĩa.

2:/pizza thực phẩm -t pepperoni -d pepsi - sẽ hiển thị "Vì vậy, bạn muốn một Pizza với Pepperoni và Pepsi để uống?"

Làm cách nào để phát hiện lệnh/lệnh đầu tiên đã được nhập và cũng đọc các đối số như -t pepperoni (đứng đầu) và -d pepsi (để uống) nếu bánh pizza/thực phẩm đã được nhập?

Vấn đề chính của tôi là tìm ra cách phát hiện từ đầu tiên đã gõ, tìm ra rằng nếu đó là/help thì hãy gọi một số phương thức sẽ gửi một số văn bản trợ giúp vào bảng điều khiển hoặc nếu lệnh là/thực phẩm rồi đọc những gì là sau khi lệnh/thực phẩm, -t, và -p.

static void Main(string[] args) 
    { 
     Console.WriteLine("Welcome To Food Hut"); 
     Console.ReadLine(); 

     // if readline equals to /help then display some help text. 


     // if /food command is typed, read first argument after /food Pizza, -t TheTopping 
     // and -p ForWhatToDrink 

     // and then display, 'So you would like a Pizza with Pepperoni and Pepsi to drink?' 
    } 

Trả lời

0

Nhìn vào String.Contains

3

gợi ý ngay lập tức của tôi sẽ là một cái gì đó như thế này:

string input = Console.ReadLine(); 
if (input == "/help") { } 
else if (input.StartsWith("/food")) { } 
else { //... } 

Chặn điều đó, giải pháp đơn giản nhất tiếp theo liên quan đến regex. Nếu bạn cần một cái gì đó thực sự mở rộng, bạn có thể nhìn vào một lexer/parser.

Nhưng sau đó một lần nữa, một cái gì đó cho tôi biết bạn đang tiếp cận vấn đề một cách sai lầm. Có thể sẽ dễ dàng hơn khi hiển thị menu cho người dùng của bạn, như sau:

Food: 
1) Tofu 
2) Tempeh 
3) Seitan 
4) Soup 

Choice (1-4)? [users input] 

Drink: 
1) Pepsi 
2) Coffee 
3) Water 
4) Tea 
5) Juice 

Choice (1-5)? [users input] 

Trình đơn được đánh số có thể dễ dàng hơn cho người dùng của bạn tiêu hóa.

0

Paul đúng, bạn sẽ cần sử dụng các thành viên Chuỗi khác nhau để hoàn thành nhiệm vụ này.

MSDN

Nếu bạn đang cảm thấy thực sự doanh nghiệp, bạn có thể xem bằng cách sử dụng lớp String.Text.RegularExpression để phân tích các văn bản, nhưng để bắt đầu, hãy sử dụng các thành viên chuỗi.

Đồng thời thử googling phân tích cú pháp chuỗi C#.

2

Để bỏ qua các khái niệm cơ bản về mã hóa, bạn có thể muốn xem qua một tiểu dự án phân tích cú pháp dòng lệnh Genghis project bằng Chris Sells. Đây là lần đầu tiên trong bảng trên trang được liên kết.

+0

wow đây chỉ là công cụ tuyệt vời. –

3

Sử dụng string.split để tìm tất cả các từ được phân tách bằng dấu cách.

input = Console.ReadLine(); 
string[] commands = input.Split(' '); 
if(commands[0] == "/food") 
{ 
if(commands[1] == "Pizza"); 
    ..... 
} 
40

Tôi khuyên bạn nên Richard Lopes' Command Line Arguments Parser. Nó rất mạnh và rất dễ sử dụng.Ngoài ra, nó chấp nhận nhiều cách khác nhau của quy định cụ thể các đối số, ví dụ:

  • /name = Stefan
  • --name = Stefan
  • --name = "Nhiều chữ"
  • -name 'Stefan '

Ví dụ Code:

static void Main(string[] args) 
{ 
    Arguments cmdline = new Arguments(args); 

    Console.WriteLine(cmdline["name"]); 
} 
+0

Đây là cách duy nhất để đi! Cảm ơn nhiều đến cả Richard Lopes và Stefan Schultze. – PseudoToad

+0

Đối tượng Arguments đến từ đâu? Dự án dòng lệnh của tôi không nhận ra nó. – theJerm

+0

@theJerm Điều này chắc chắn là cũ và bạn có thể hiểu điều này nhưng đối với những người có thể không biết ... bạn phải sao chép lớp Arguments vào dự án của bạn từ bài viết dự án mã trong liên kết của Stefan trước khi bạn có thể sử dụng nó. – fujiiface

-3

gì về trường hợp này:

mssinp.exe -cf "C:\Temp\config.txt" 

giá trị cho tham số sẽ được tách ra như

[0] 'C' 
[1] '\Temp\config.txt' 
+0

vui lòng không đăng câu hỏi/ghi chú dưới dạng câu trả lời – rob

Các vấn đề liên quan