2010-06-18 19 views
20

मेरे पास शब्दकोशकिसी टेक्स्ट फ़ाइल में किसी शब्दकोष की सामग्री कैसे लिखें?

का एक शब्दकोश वस्तु है और पूरी सामग्री को टेक्स्ट फ़ाइल में आउटपुट करने के लिए स्ट्रीमवाइटर का उपयोग करने का प्रयास कर रहा है लेकिन शब्दकोश वर्ग से सही विधि नहीं ढूंढ पा रहा है।

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
     { 
      sw.WriteLine(dictionary.First()); 

     } 

मैं केवल पहला तत्व प्राप्त कर सकते हैं और यह एक वर्ग कोष्ठक प्लस के बीच में एक अल्पविराम विभाजक के रूप में अच्छी तरह से से घिरा है:

[पीटर, व्यवस्थापक]

और के लिए अच्छा होगा [पीटर व्यवस्थापक] (अल्पविराम के बिना)

उत्तर

24

आप खुद प्रविष्टियों से अधिक पाश की जरूरत है:

using (StreamWriter file = new StreamWriter("myfile.txt")) 
    foreach (var entry in dictionary) 
     file.WriteLine("[{0} {1}]", entry.Key, entry.Value); 
+0

धन्यवाद, मेरे सहकर्मी ने कहा है कि मैं कुछ की तरह कर सकते हैं ... foreach (KeyValuePair <स्ट्रिंग, स्ट्रिंग> शब्दकोश में प्रवेश) sw.WriteLine (entry.Key + entry.Value); – Chris

0

आप तार आप लिखना चाहते हैं का चयन करने के, और जिसके परिणामस्वरूप गणन से अधिक पुनरावृति प्रत्येक पंक्ति लिखने के लिए की जरूरत है:

var dataToWrite = from kvp in dictionary 
        select String.Format("[{0} {1}"], kvp.Key kvp.Value); 

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
{ 
    foreach (string dataLine in dataToWrite) 
    { 
     sw.WriteLine(dataLine); 
    } 
} 
2
foreach (KeyValuePair<string,string> kvp in dictionary) 
{ 
    System.IO.File.AppendAllText("dictionary.txt", string.Format("{0} {1} {2}", kvp.Key, kvp.Value, Environment.NewLine)); 
} 
+0

+1 क्योंकि मैं उन तरीकों को फिर से लिख रहा हूं जो सूची को लेने के लिए सूची लेते हैं और मैं वास्तव में स्थिर 'फ़ाइल' वर्ग विधियों का उपयोग करना चाहता हूं। लेकिन फिर मुझे एहसास हुआ कि यह फ़ाइल को प्रत्येक पुनरावृत्ति को खोलता है और बंद करता है, जो शायद एक अच्छा विचार नहीं है। – skwear

0
var pairs = from p in yourDictionary.Keys 
    select new {Key=p, Value=yourDictionary[p]}; 

foreach(var pair in pairs) 
    yourStreamWriter.WriteLine("Key={0}, Value={1}", pair.Key, pair.Value); 
29
File.WriteAllLines("myfile.txt", 
    dictionary.Select(x => "[" + x.Key + " " + x.Value + "]").ToArray()); 

(और तुम .NET4 तो उपयोग कर रहे हैं आप अंतिम ToArray कॉल को छोड़ सकते हैं।)

+4

मुझे एक लाइन समाधान पसंद है! –

+1

मैं इसे एक विस्तार विधि बनाने का सुझाव भी दूंगा। –

+1

सीएसवी शैली: फ़ाइल। राइटअललाइन ("myfile.txt", शब्दकोश। चयन करें (एस => स्ट्रिंग.फॉर्मैट ("{0}; {1}", एस। के, एस। वैल्यू)); –

1
File.WriteAllLines("myfile.txt",dictionary.Select(s=>s.ToString()); 

यह करना चाहिए के रूप में शब्दकोश तत्व के लिए ToString समारोह प्रत्येक ELEM डाल करने के लिए परिभाषित किया गया है पाठ फ़ाइल में निम्न प्रारूप में ent।

[key1,Value1] 
[key2,Value2] 
. 
. 
+0

उपरोक्त फ़ाइल को एक्सेल में बाद में खोलना आसान बनाता है और यदि आप "myfile.txt" के बजाय "myfile.csv" का उपयोग करते हैं तो आपके पास कुंजी और मान अलग हो जाएगा। – ambassallo

संबंधित मुद्दे

 संबंधित मुद्दे