Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从文件中获取最佳记录_C# - Fatal编程技术网

C# 从文件中获取最佳记录

C# 从文件中获取最佳记录,c#,C#,我有一个里面有以下文字的文件 mimi,m,70 tata,f,60 bobo,m,100 soso,f,30 米米,男,70岁 塔塔,f,60 波波,m,100 索索,f,30 我做了从文件读取的事情,还有很多其他的方法和函数,但是我如何才能根据等级得到最好的男性名字和他的等级 这是我写的代码。希望不会太久 using System; using System.Collections.Generic; using System.Text; using System.IO; namespace

我有一个里面有以下文字的文件

mimi,m,70 tata,f,60 bobo,m,100 soso,f,30 米米,男,70岁 塔塔,f,60 波波,m,100 索索,f,30 我做了从文件读取的事情,还有很多其他的方法和函数,但是我如何才能根据等级得到最好的男性名字和他的等级

这是我写的代码。希望不会太久

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

namespace practice_Ex
{
    class Program
    {
        public static int[] ReadFile(string FileName, out string[] Name, out char[] Gender)
        {
            Name = new string[1];
            int[] Mark = new int[1];
            Gender = new char[1];
            if (File.Exists(FileName))
            {
                FileStream Input = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                StreamReader SR = new StreamReader(Input);
                string[] Current;
                int Counter = 0;
                string Str = SR.ReadLine();
                while (Str != null)
                {
                    Current = Str.Split(',');
                    Name[Counter] = Current[0];
                    Mark[Counter] = int.Parse(Current[2]);
                    Gender[Counter] = char.Parse(Current[1].ToUpper());
                    Counter++;
                    Array.Resize(ref Name, Counter + 1);
                    Array.Resize(ref Mark, Counter + 1);
                    Array.Resize(ref Gender, Counter + 1);
                    Str = SR.ReadLine();
                }
            }
            return Mark;
        }

        public static int MostFreq(int[] M, out int Frequency)
        {
            int Counter = 0;
            int Frequent = 0;
            Frequency = 0;
            for (int i = 0; i < M.Length; i++)
            {
                Counter = 0;
                for (int j = 0; j < M.Length; j++)
                    if (M[i] == M[j])
                        Counter++;
                if (Counter > Frequency)
                {
                    Frequency = Counter;
                    Frequent = M[i];
                }
            }
            return Frequent;
        }

        public static int Avg(int[] M)
        {
            int total = 0;
            for (int i = 0; i < M.Length; i++)
                total += M[i];
            return total / M.Length;
        }

        public static int AvgCond(char[] G, int[] M, char S)
        {
            int total = 0;
            int counter = 0;
            for (int i = 0; i < G.Length; i++)
                if (G[i] == S)
                {
                    total += M[i];
                    counter++;
                }
            return total / counter;
        }

        public static int BelowAvg(int[] M, out int AboveAvg)
        {
            int Bcounter = 0;
            AboveAvg = 0;
            for (int i = 0; i < M.Length; i++)
            {
                if (M[i] < Avg(M))
                    Bcounter++;
                else
                    AboveAvg++;
            }
            return Bcounter;
        }

        public static int CheckNames(string[] Name, char C)
        {
            C = char.Parse(C.ToString().ToLower());
            int counter = 0;
            string Str;
            for (int i = 0; i < Name.Length - 1; i++)
            {
                Str = Name[i].ToLower();
                if (Str[0] == C || Str[Str.Length - 1] == C)
                    counter++;
            }
            return counter;
        }

        public static void WriteFile(string FileName, string[] Output)
        {
            FileStream FS = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter SW = new StreamWriter(FS);
            for (int i = 0; i < Output.Length; i++)
                SW.WriteLine(Output[i]);
        }

        static void Main(string[] args)
        {
            int[] Mark;
            char[] Gender;
            string[] Name;
            string[] Output = new string[8];
            int Frequent, Frequency, AvgAll, MaleAvg, FemaleAvg, BelowAverage, AboveAverage, NamesCheck;
            Mark = ReadFile("c:\\IUST1.txt", out Name, out Gender);
            Frequent = MostFreq(Mark, out Frequency);
            AvgAll = Avg(Mark);
            MaleAvg = AvgCond(Gender, Mark, 'M');
            FemaleAvg = AvgCond(Gender, Mark, 'F');
            BelowAverage = BelowAvg(Mark, out AboveAverage);
            NamesCheck = CheckNames(Name, 'T');
            Output [0]= "Frequent Mark = " + Frequent.ToString();
            Output [1]= "Frequency = " + Frequency.ToString();
            Output [2]= "Average Of All = " + AvgAll.ToString();
            Output [3]= "Average Of Males = " + MaleAvg.ToString();
            Output [4]= "Average Of Females = " + FemaleAvg.ToString();
            Output [5]= "Below Average = " + BelowAverage.ToString();
            Output [6]= "Above Average = " + AboveAverage.ToString();
            Output [7]= "Names With \"T\" = " + NamesCheck.ToString();
            WriteFile("c:\\Output.txt", Output);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用System.IO;
名称空间实践
{
班级计划
{
公共静态int[]ReadFile(字符串文件名,out字符串[]名称,out字符[]性别)
{
名称=新字符串[1];
int[]标记=新的int[1];
性别=新字符[1];
if(File.Exists(FileName))
{
FileStream Input=新FileStream(文件名,FileMode.Open,FileAccess.Read);
StreamReader SR=新的StreamReader(输入);
字符串[]当前;
int计数器=0;
字符串Str=SR.ReadLine();
while(Str!=null)
{
当前=Str.Split(',');
名称[计数器]=当前[0];
标记[Counter]=int.Parse(当前[2]);
性别[Counter]=char.Parse(当前[1].ToUpper());
计数器++;
数组。调整大小(参考名称,计数器+1);
数组。调整大小(参考标记,计数器+1);
数组。调整大小(参考性别,计数器+1);
Str=SR.ReadLine();
}
}
返回标记;
}
公共静态int MostFreq(int[]M,输出int频率)
{
int计数器=0;
int=0;
频率=0;
对于(int i=0;i频率)
{
频率=计数器;
频繁=M[i];
}
}
经常返回;
}
公共静态平均整数(整数[]M)
{
int-total=0;
对于(int i=0;i
我认为最快和最少的编码方式是将txt转换为xml,然后使用Linq2Xml从中进行选择


编辑:这可能比你想做的更多。另一个选项是创建一个名为AcademicRecord的类,该类具有人名、性别等属性。然后在读取文件时,将其添加到文件中每一行的列表中。然后使用排序谓词对列表进行排序;最高记录将是名单上的第一个记录

我认为最快和最少的编码方式是将txt转换为xml,然后使用Linq2Xml从中进行选择

编辑:这可能比你想做的更多。另一个选项是创建一个名为AcademicRecord的类,该类具有人名、性别等属性。然后在读取文件时,将其添加到文件中每一行的列表中。然后使用排序谓词对列表进行排序;高地
using System;
using System.Collections.Generic;
using System.IO;

enum Gender { Male, Female, Unknown }
class Record
{
    public string Name { get; set; }
    public Gender Gender { get; set; }
    public int Score { get; set; }
}
static class Program
{
    static IEnumerable<string> ReadLines(string path)
    {
        using (StreamReader reader = File.OpenText(path))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                yield return line;
            }
        }
    }
    static IEnumerable<Record> Parse(string path)
    {
        foreach (string line in ReadLines(path))
        {
            string[] segments = line.Split(',');
            Gender gender;
            switch(segments[1]) {
                case "m": gender = Gender.Male; break;
                case "f": gender = Gender.Female; break;
                default: gender = Gender.Unknown; break;
            }
            yield return new Record
            {
                Name = segments[0],
                Gender = gender,
                Score = int.Parse(segments[2])
            };
        }
    }
    static void Main()
    {
        Record best = null;
        foreach (Record record in Parse("data.txt"))
        {
            if (record.Gender != Gender.Male) continue;
            if (best == null || record.Score > best.Score)
            {
                best = record;
            }
        }

        Console.WriteLine("{0}: {1}", best.Name, best.Score);
    }
}
List<Record> data = new List<Record>(Parse("data.txt"));
public String FindRecord()
{
    String[] lines = File.ReadAllLines("MyFile.csv");
    Array.Sort(lines, CompareByBestMaleName);
    return lines[0];
}

int SortByBestMaleName(String a, String b)
{
    String[] ap = a.Split();            
    String[] bp = b.Split();
     // Always rank male higher
    if (ap[1] == "m" && bp[1] == "f") { return 1; }
    if (ap[1] == "f" && bp[1] == "m") { return -1; }
    // Compare by score
    return int.Parse(ap[2]).CompareTo(int.Parse(bp[2]));
}