Считать из файла - C#
Формулировка задачи:
По заданию, нужно вывести в файл out.txt фамилии и имена учащихся в порядке убывания их среднего балла.
Но в коде ( и по заданию) предполагается, что оценок будет 3. МНЕ НУЖНО, чтобы количество оценок считывалось автоматически (гарантирую то, что количество будет одинаковое у всех студентов) и средний балл соответственно находился исходя из количества оценок.
using System;
using System.IO;
namespace Lab06
{
class Program
{
struct Student
{
public string Name;
public double AverageScore;
public uint Position;
};
static string Third_GetName(string Line)
{
string Ret = "";
int Spaces = 2;
foreach (char c in Line)
{
if ((int)c == 32) Spaces--;
if ((Char.IsLetter(c) || ((int)c == 32)) && Spaces != 0)
{
Ret = Ret + c;
}
}
return Ret;
}
static double Third_GetAverageScore(string Line)
{
uint Ret = 0;
uint Score = 0;
foreach (char c in Line)
{
if (Char.IsDigit(c))
{
Score = UInt16.Parse(c.ToString());
if ((Score < 2 || Score > 5)) Console.WriteLine("Один из баллов за предмет не входит в средний балл, т.к он не в [2, 5]");
else
{
Ret += Convert.ToUInt16(c.ToString());
}
}
}
return ((double)(Ret) / 3.0);
}
static void Third()
{
try
{
StreamReader f = new StreamReader("вход.txt");
uint CountOfMembers = 0;
try
{
CountOfMembers = Convert.ToUInt32(f.ReadLine());
}
catch (Exception e)
{
Console.WriteLine("Ошибка: {0}", e.Message);
}
Console.WriteLine("Количество учащихся: {0}", CountOfMembers);
string[] DataList = new string[CountOfMembers];
Student[] MemberList = new Student[CountOfMembers];
for (int i = 0; i < CountOfMembers; i++)
{
DataList[i] = f.ReadLine();
MemberList[i] = new Student();
MemberList[i].Name = Third_GetName(DataList[i]);
MemberList[i].AverageScore = Third_GetAverageScore(DataList[i]);
}
f.Close();
StreamWriter _f = new StreamWriter("out.txt");
uint counter = 0;
uint[] ScoreMap = new uint[CountOfMembers];
for (int i = 0; i < CountOfMembers; i++)
{
counter = 0;
for (int j = 0; j < CountOfMembers; j++)
{
if (MemberList[i].AverageScore > MemberList[j].AverageScore) counter++;
}
MemberList[i].Position = CountOfMembers - counter;
}
Student[] t = new Student[CountOfMembers];
for (int i = 0; i < CountOfMembers; i++) t[MemberList[i].Position - 1] = MemberList[i];
for (int i = 0; i < CountOfMembers; i++) _f.WriteLine("{0} {1}", t[i].Name, t[i].AverageScore);
_f.Close();
}
catch (Exception e)
{
Console.WriteLine("Ошибка: {0}\nФайл будет создан", e.Message);
StreamWriter f = new StreamWriter("вход.txt");
f.Close();
}
}
static void Main (string[] args)
{
Third();
Console.ReadKey();
}
}
}Решение задачи: «Считать из файла»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (StreamReader sr = new StreamReader(@"E:\1.txt", Encoding.Default))
{
using (StreamWriter sw = new StreamWriter(@"E:\2.txt", true, Encoding.Default))
{
while (true)
{
string temp = sr.ReadLine();
if (temp == null)
break;
String[] stringArr = temp.Split(' ');
IEnumerable<double> intArr = stringArr[2].ToCharArray().Select((x) => Char.GetNumericValue(x)); ;
double result = 0;
foreach (var el in intArr)
result += el;
result = result / intArr.Count();
foreach (var el in stringArr.Take(2))
sw.Write(" " + el);
sw.WriteLine(" " + result);
}
}
}
}
}
}