टेक्स्ट लाइनों की एक इनपुट फ़ाइल को देखते हुए, मैं डुप्लिकेट लाइनों की पहचान और हटा देना चाहता हूं। कृपया सी # का एक सरल स्निपेट दिखाएं जो इसे पूरा करता है।टेक्स्ट फ़ाइल से डुप्लिकेट लाइन्स निकालें?
उत्तर
यह करना चाहिए (और बड़ी फ़ाइलों के साथ कॉपी जाएगा)।
ध्यान दें कि यह केवल लगातार लाइनों नकल निकाल देता है, यानी
a
b
b
c
b
d
आप कोई डुप्लिकेट कहीं भी चाहते हैं
a
b
c
b
d
के रूप में खत्म हो जाएगा, तो आप का एक सेट रखने के लिए की आवश्यकता होगी लाइनें जो आप पहले ही देख चुके हैं।
using System;
using System.IO;
class DeDuper
{
static void Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("Usage: DeDuper <input file> <output file>");
return;
}
using (TextReader reader = File.OpenText(args[0]))
using (TextWriter writer = File.CreateText(args[1]))
{
string currentLine;
string lastLine = null;
while ((currentLine = reader.ReadLine()) != null)
{
if (currentLine != lastLine)
{
writer.WriteLine(currentLine);
lastLine = currentLine;
}
}
}
}
}
ध्यान दें कि यह मान लिया गया है Encoding.UTF8
, और है कि आप फ़ाइलों का उपयोग करना चाहते हैं। यह एक विधि है, हालांकि के रूप में सामान्यीकरण करने के लिए आसान है:
static void CopyLinesRemovingConsecutiveDupes
(TextReader reader, TextWriter writer)
{
string currentLine;
string lastLine = null;
while ((currentLine = reader.ReadLine()) != null)
{
if (currentLine != lastLine)
{
writer.WriteLine(currentLine);
lastLine = currentLine;
}
}
}
(। ध्यान दें कि कि कुछ भी बंद नहीं होती है - फोन करने वाले है कि क्या करना चाहिए)
यहाँ एक संस्करण है कि सभी डुप्लिकेट निकाल देंगे, बजाय है बस लगातार लोगों को:
static void CopyLinesRemovingAllDupes(TextReader reader, TextWriter writer)
{
string currentLine;
HashSet<string> previousLines = new HashSet<string>();
while ((currentLine = reader.ReadLine()) != null)
{
// Add returns true if it was actually added,
// false if it was already there
if (previousLines.Add(currentLine))
{
writer.WriteLine(currentLine);
}
}
}
छोटे फ़ाइलों के लिए:
string[] lines = File.ReadAllLines("filename.txt");
File.WriteAllLines("filename.txt", lines.Distinct().ToArray());
एक लंबे फ़ाइल के लिए (और गैर लगातार दोहराव) मैं एक हैश // स्थिति लुकअप तालिका के निर्माण के रूप में मैं चला गया लाइन द्वारा फ़ाइलों लाइन कॉपी चाहते हैं।
जैसा कि प्रत्येक पंक्ति की प्रतिलिपि बनाई गई है, हैश वैल्यू के लिए चेक करें, अगर टक्कर दो बार जांचें कि लाइन समान है और अगली पर जाएं। (
केवल यह काफी बड़ी फ़ाइलों हालांकि के लिए मूल्य।
यहाँ एक स्ट्रीमिंग का दृष्टिकोण है कि स्मृति में सभी अद्वितीय तार पढ़ने की तुलना में कम भूमि के ऊपर उठाना चाहिए।
var sr = new StreamReader(File.OpenRead(@"C:\Temp\in.txt"));
var sw = new StreamWriter(File.OpenWrite(@"C:\Temp\out.txt"));
var lines = new HashSet<int>();
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
int hc = line.GetHashCode();
if(lines.Contains(hc))
continue;
lines.Add(hc);
sw.WriteLine(line);
}
sw.Flush();
sw.Close();
sr.Close();
इसे कम स्मृति की आवश्यकता है, लेकिन यदि हैश टकराव है तो यह गलत आउटपुट भी उत्पन्न करता है। –
मैं शुद्ध करने के लिए & है नया हूँ लिखा कुछ अधिक सरल, नहीं बहुत efficient.Please
विभिन्न तरीकोंclass Program
{
static void Main(string[] args)
{
string[] emp_names = File.ReadAllLines("D:\\Employee Names.txt");
List<string> newemp1 = new List<string>();
for (int i = 0; i < emp_names.Length; i++)
{
newemp1.Add(emp_names[i]); //passing data to newemp1 from emp_names
}
for (int i = 0; i < emp_names.Length; i++)
{
List<string> temp = new List<string>();
int duplicate_count = 0;
for (int j = newemp1.Count - 1; j >= 0; j--)
{
if (emp_names[i] != newemp1[j]) //checking for duplicate records
temp.Add(newemp1[j]);
else
{
duplicate_count++;
if (duplicate_count == 1)
temp.Add(emp_names[i]);
}
}
newemp1 = temp;
}
string[] newemp = newemp1.ToArray(); //assigning into a string array
Array.Sort(newemp);
File.WriteAllLines("D:\\Employee Names.txt", newemp); //now writing the data to a text file
Console.ReadLine();
}
}
एक विचार: यह उपयोगी होगा अगर आप यह समझाने के लिए अपने कोड पर टिप्पणी कर सकते हैं कि आप क्या कर रहे हैं (और क्यों) - इससे दूसरों को आपकी पद्धति को समझने में मदद मिलेगी और भविष्य में इसे अपनी परिस्थितियों में लागू किया जाएगा। –
- 1. टेक्स्ट फ़ाइल की पंक्तियों से डेटा निकालें
- 2. निकालें लाइन्स जब स्तंभ कश्मीर AWK/पर्ल
- 3. किसी तालिका से डुप्लिकेट निकालें
- 4. टेक्स्ट से JSON निकालें
- 5. टेक्स्ट से टेक्स्ट निकालें, लेटेक्स टैग
- 6. जावा एक ऐरे से डुप्लिकेट निकालें?
- 7. NSMutableArray - निकालें डुप्लिकेट
- 8. PHP एक सरणी से डुप्लिकेट निकालें
- 9. शब्दकोशों की सूची से डुप्लिकेट निकालें
- 10. टेक्स्ट फ़ाइल से डुप्लिकेट पंक्तियों को हटाने के लिए बैच
- 11. फ़ाइल से निकालें
- 12. sed/awk: टेक्स्ट स्ट्रीम से पैटर्न निकालें
- 13. टेक्स्ट एचटीएमएल कैनवास से पथ निकालें
- 14. संशोधित प्रतिबद्धता से फ़ाइल निकालें
- 15. plupload कतार से फ़ाइल निकालें?
- 16. विशिष्ट टेक्स्ट लाइनों को निकालें?
- 17. यदि फ़ील्ड डुप्लिकेट है तो लाइन निकालें
- 18. ऑब्जेक्ट प्रॉपर्टी के आधार पर सरणी से डुप्लिकेट निकालें?
- 19. डेटाटेबल और कस्टम IEqualityComparer <DataRow> से डुप्लिकेट निकालें
- 20. डेटा फ्रेम से आंशिक डुप्लिकेट को कैसे निकालें?
- 21. एक mysql डीबी से डुप्लिकेट प्रविष्टियों को कैसे निकालें?
- 22. फ़ाइल फ़ाइल डिस्क्रिप्टर से फ़ाइल फ़ाइल निकालें या FILE *
- 23. प्लॉटिंग क्वांटाइल रिग्रेशन लाइन्स
- 24. डुप्लिकेट एमआईएम प्रकार "टेक्स्ट/एचटीएमएल"?
- 25. विम, लांग लाइन्स और स्क्रॉलिंग
- 26. सेड एकाधिक लाइन्स डालें
- 27. हाइपरलिंक निकालें लेकिन टेक्स्ट रखें?
- 28. डुप्लिकेट फ़ाइल नाम
- 29. exe फ़ाइल से VB.NET कोड निकालें
- 30. विंडोज .lnk (शॉर्टकट) फ़ाइल से आइकन निकालें
रहे हैं अपने विचारों को साझा करने के लिए स्वतंत्र भरने जा सकता है।, कुछ आसान लागू करने के लिए दूसरों की तुलना में। लिया जाने वाला दृष्टिकोण टेक्स्ट फ़ाइल के आकार और मिलान लाइनों की अपेक्षित संख्या पर निर्भर कर सकता है। क्या आप उस विशिष्ट समस्या का वर्णन कर सकते हैं जिसे आप हल करने का प्रयास कर रहे हैं? धन्यवाद :) –
। । । और वांछित प्रदर्शन। –