हे दोस्तों, मैं एक टेक्स्ट फ़ाइल से जानकारी लेने और एक CSV फ़ाइल में जानकारी आउटपुट करने के लिए एक प्रोग्राम पर काम कर रहा हूँ, एक चीज़ जो मुझे करने की ज़रूरत है वह है डुप्लिकेट फ़ाइलों की गिनती का पूरक (जहाँ संभव हो, एक अपराध के डुप्लिकेट रिकॉर्ड के खिलाफ आरोप लगाया गया है) एक व्यक्ति को "गणना" नामक एक अतिरिक्त फ़ील्ड के साथ एक एकल रिकॉर्ड में एकत्रित किया जाना चाहिए जो कि पाए गए डुप्लिकेट रिकॉर्ड की संख्या को इंगित करता है (गैर-डुप्लिकेट रिकॉर्ड के लिए, यह फ़ील्ड शून्य पर सेट किया जाना चाहिए)।) मुझे काउंटर जोड़ने में थोड़ी परेशानी हो रही है और मैं सोच रहा था कि क्या आप लोगों के पास मेरे लिए कोई सलाह है।

शुक्रिया

using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace finalproj
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("DISTRICT.DISTRICT_COURT_.11.13.18.AM.000B.CAL.txt");

            StreamWriter writer = new StreamWriter("outtext.csv");

            int counts;
            string line = "";

            for (int x = 0; x < 1; x++)
            {
                string buffer = reader.ReadLine();
                line += " " + buffer;
            }

            //StreamWriter writer = new StreamWriter("outtext.csv");
            //writer.WriteLine(line);
            //writer.Close();

            //Console.WriteLine(line);

            while (line != null)
            {
                if (line.Contains("APT."))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("BPD"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("18IF"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("SHP"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("SFF"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("CLS:"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("BOND"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("ATTY"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("(T)"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("(M)"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("(F)"))
                {
                    Console.WriteLine(line);
                }
                else if (line.Contains("(I)"))
                {
                    Console.WriteLine(line);
                }


                line = reader.ReadLine();
                writer.WriteLine(line);
            }


            writer.WriteLine(line);

            reader.Close();
            writer.Close();
            Console.WriteLine(line);


            //using (reader)
            //{
            //    
            //string line1;
            //string[] split = new
            //    while((line1 = reader.ReadLine()) !=null)
            //    {
            //        string[] split = 
            //    }
            //}

            Console.ReadKey();
        }
    }
}
1
esgtrdhtyjg 8 पद 2018, 06:00

2 जवाब

सबसे बढ़िया उत्तर

लाइनों को विभाजित करने और घटनाओं की गणना करने के लिए, आप न्यूलाइन का उपयोग करके विभाजित कर सकते हैं और लिंक का उपयोग कर सकते हैं

string[] lines = str.Split(new[] { Environment.NewLine },StringSplitOptions.None);
var result = lines.GroupBy(g => g)
            .Select(s => new { Key = s.Key, Count = s.Count()})
            .ToDictionary(d => d.Key, d => d.Count);

परिणाम में ऐसी रेखाएँ होंगी जिनमें एकल घटना होती है। अगर आप केवल डुप्लीकेट लाइन चाहते हैं

var result = lines.GroupBy(g => g).Where(x=> x.Count()>1)
            .Select(s => new { Key = s.Key, Count = s.Count()})
            .ToDictionary(d => d.Key, d => d.Count);

फिर आप सीधे शब्दकोश से सीएसवी लिख सकते हैं

File.WriteAllLines(filePath, result.Select(x=>$"{x.Key},{x.Value},"));
1
Anu Viswan 8 पद 2018, 06:19

यहाँ आप जाते हैं, मैंने रेगेक्स का उपयोग आपके द्वारा खोजे जाने वाले मिलान के लिए किया था और लाइनों को पकड़ने के लिए एक सॉर्टेडसेट का उपयोग किया था और देखें कि क्या डुप्लिकेट हैं। सावधान रहें, बड़ी फ़ाइलों के साथ आप कुछ मेमोरी का उपयोग कर सकते हैं लेकिन जैसा कि यह सीएसवी से संबंधित है, मुझे लगता है कि आप ठीक हैं:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApp4
{
    class Program
    {

        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("DISTRICT.DISTRICT_COURT_.11.13.18.AM.000B.CAL.txt");

            StreamWriter writer = new StreamWriter("outtext.csv");

            int counts = 0;
            string line ;

            SortedSet<string> uniqueLine = new SortedSet<string>();

            Regex findWords = new Regex(@"(APT.|BPD|18IF|SHP|SFF|CLS:|BOND|ATTY|\(T\)|\(M\)|\(F\)|\(I\))");

            while ((line = reader.ReadLine()) != null)
            {
                if (uniqueLine.Contains(line))
                {
                    counts++;
                }
                else
                {
                    uniqueLine.Add(line);
                    writer.WriteLine(line);
                }
                Match aMatch = findWords.Match(line);

                if (aMatch.Success)
                {
                    Console.WriteLine(line);
                }

            }

            writer.WriteLine("Count:{0}", counts);
            writer.Close();


            Console.ReadKey();
        }
    }
}
0
Aldert 8 पद 2018, 12:34