दिलचस्प पोस्ट
32-बिट विंडोज 7 मशीन पर पायथन 3.5 में सिप्पी स्थापित करना संस्करण संख्या कैसे करें? जावा में जेसन को सूची कैसे परिवर्तित करें Ffmpeg के साथ वीडियो के केंद्र में पारदर्शी वॉटरमार्क कैसे जोड़ें? सीजीपीएटी के सीजीपॉइंट (एस) को कैसे प्राप्त करें JSF पृष्ठों से अनुरोध और सत्र पैरामीटर और गुण प्राप्त करें रूबी सरणी से मैं कैसे औसत बना सकता हूं? क्या यह जीसीसी त्रुटि "… स्थानांतरित करने के लिए फिट करने के लिए छंटनी …" मतलब है? बाश में सबस्ट्रिंग निकालें jQuery के एजेक्स (जेएसओएनपी) एक टाइमआउट की अनदेखी करता है और त्रुटि ईवेंट को आग में नहीं करता है एंड्रॉइड: एप्लिकेशन के मेनू को अनुकूलित करें (जैसे पृष्ठभूमि का रंग) संस्करण 4.1 के रूप में ओपनजीएल में टेक्स्ट रेंडरिंग के लिए अत्याधुनिक क्या है? अपलोड करने से पहले HTML5 पूर्व-आकार छवियाँ सूची आइटम को कॉलम के रूप में कैसे प्रदर्शित किया जाए? टॉमकैट में डिफॉल्ट सर्विसलेट के लिए विशिष्ट सर्विसलेट को मैप करना

सी # कंसोल पाइप के साथ इनपुट प्राप्त करते हैं

मुझे पता है कि पैरामीटर के साथ प्रोग्राम कंसोल अनुप्रयोग कैसे करें, उदाहरण: myProgram.exe param1 param2

मेरा प्रश्न यह है, मैं अपने कार्यक्रम को कैसे काम कर सकता हूं, उदाहरण के लिए: "शब्द" गूंज myProgram.exe?

वेब के समाधान से एकत्रित समाधान "सी # कंसोल पाइप के साथ इनपुट प्राप्त करते हैं"

आपको Console.Read() का उपयोग करना होगा। पढ़ें Console.Read() और Console.ReadLine() जैसे कि आप उपयोगकर्ता इनपुट पढ़ रहे थे। पाइप्स उपयोगकर्ता इनपुट को पारदर्शी रूप से प्रतिस्थापित करते हैं। आप आसानी से दोनों का उपयोग नहीं कर सकते (हालांकि मुझे यकीन है कि यह काफी संभव है …)।

संपादित करें:

सरल cat शैली कार्यक्रम:

 class Program { static void Main(string[] args) { string s; while ((s = Console.ReadLine()) != null) { Console.WriteLine(s); } } } 

और जब उम्मीद की जाती है, तो आउटपुट:

 C: \ ... \ ConsoleApplication1 \ bin \ Debug> "फू बार बाज़" गूंज |  ConsoleApplication1.exe
 "फू बार बाज़"

 C: \ ... \ ConsoleApplication1 \ बिन \ डीबग>

निम्नलिखित इनपुट के लिए एप्लिकेशन को निलंबित नहीं करेगा और डेटा को पाइप नहीं किया जाता है या नहीं। एक हैक का एक सा; और त्रुटि पकड़ने के कारण, कई पाइप कॉल किए जाने पर प्रदर्शन की कमी हो सकती है, लेकिन … आसान।

 public static void Main(String[] args) { String pipedText = ""; bool isKeyAvailable; try { isKeyAvailable = System.Console.KeyAvailable; } catch (InvalidOperationException expected) { pipedText = System.Console.In.ReadToEnd(); } //do something with pipedText or the args } 

.NET 4.5 में यह है

 if (Console.IsInputRedirected) { using(stream s = Console.OpenStandardInput()) { ... 

इसे करने का यही तरीका है:

 static void Main(string[] args) { Console.SetIn(new StreamReader(Console.OpenStandardInput(8192))); // This will allow input >256 chars while (Console.In.Peek() != -1) { string input = Console.In.ReadLine(); Console.WriteLine("Data read was " + input); } } 

यह दो उपयोग के तरीकों की अनुमति देता है मानक इनपुट से पढ़ें:

 C:\test>myProgram.exe hello Data read was hello 

या पाइप इनपुट से पढ़ें:

 C:\test>echo hello | myProgram.exe Data read was hello 

यहां एक और वैकल्पिक समाधान है जो अन्य समाधानों से एक साथ रखा गया था और एक तिरछी नज़र ()।

पीक के बिना () मैं अनुभव कर रहा था कि ऐप अंत में ctrl-c बिना वापस नहीं आएगा जब "प्रकार t.txt | prog.exe" कर रहा है जहां t.txt एक बहु-लाइन फ़ाइल है लेकिन सिर्फ "prog.exe" या "echo hi | prog.exe" ठीक काम किया है।

यह कोड केवल पाइप इनपुट की प्रक्रिया के लिए है

 static int Main(string[] args) { // if nothing is being piped in, then exit if (!IsPipedInput()) return 0; while (Console.In.Peek() != -1) { string input = Console.In.ReadLine(); Console.WriteLine(input); } return 0; } private static bool IsPipedInput() { try { bool isKey = Console.KeyAvailable; return false; } catch { return true; } } 

कंसोल.इन मानक इनपुट स्ट्रीम के आसपास लिपटे एक टेक्स्टरेडर के लिए एक संदर्भ है। जब आपके कार्यक्रम में बड़ी मात्रा में डेटा पाइप करते हैं, तो उस तरह से काम करना आसान हो सकता है।

आपूर्ति उदाहरण के साथ एक समस्या है

  while ((s = Console.ReadLine()) != null) 

अगर पाइप किए गए डेटा के बिना प्रोग्राम लॉन्च किया गया हो तो इनपुट का इंतजार कर रहा होगा। इसलिए उपयोगकर्ता को मैन्युअल रूप से प्रोग्राम से बाहर आने के लिए कोई भी कुंजी दबाएगी।

यह भी काम करेगा

c: \ MyApp.exe <input.txt

Stdin से कब्जा किए गए इनपुटों को हेरफेर करने के लिए मुझे स्ट्रिंगबइल्डर का इस्तेमाल करना था:

 public static void Main() { List<string> salesLines = new List<string>(); Console.InputEncoding = Encoding.UTF8; using (StreamReader reader = new StreamReader(Console.OpenStandardInput(), Console.InputEncoding)) { string stdin; do { StringBuilder stdinBuilder = new StringBuilder(); stdin = reader.ReadLine(); stdinBuilder.Append(stdin); var lineIn = stdin; if (stdinBuilder.ToString().Trim() != "") { salesLines.Add(stdinBuilder.ToString().Trim()); } } while (stdin != null); } }