将.txt文件处理为数组,并操作数组数据
本文关键字:数组 操作 操作数 数据 文件 处理 txt | 更新日期: 2023-09-27 18:12:02
我想我应该发布我正在使用的整个程序。我已经基本完成了Main方法。我只需要创建3个类。文件例程、学生和学生。FileRoutine是我遇到的主要问题。它有2个公共类。LoadStudents和LoadAssignments。Load Students应该读取学生输入文件中的所有行,从每行创建一个学生对象,并返回一个包含学生对象数组的学生对象。Load Assignments应该读取作业输入文件中的所有行,并根据学生编号将每个作业与相应的学生关联起来。这两个文本文件看起来像这样:
Students.txt
122338 Weltzer Teresa
123123 Wang Choo
123131 Adams James
123132 Binkley Joshua
123139 Howard Tyler
123160 King Alma
Assignments.txt
122338 HW1 93 0.05
123123 HW1 100 0.05
123131 HW1 90 0.05
123132 HW1 85 0.05
123139 HW1 89 0.05
123160 HW1 90 0.05
122338 Quiz1 94 0.08
123123 Quiz1 83 0.08
123131 Quiz1 93 0.08
123132 Quiz1 72 0.08
123139 Quiz1 0 0.08
123160 Quiz1 63 0.08
122338 HW2 70 0.05
123123 HW2 95 0.05
123131 HW2 100 0.05
123132 HW2 82 0.05
123139 HW2 73 0.05
123160 HW2 81 0.05
122338 HW3 87 0.05
123123 HW3 98 0.05
123131 HW3 87 0.05
123132 HW3 65 0.05
123139 HW3 55 0.05
123160 HW3 81 0.05
122338 Test1 86 0.15
123123 Test1 82 0.15
123131 Test1 92 0.15
123132 Test1 78 0.15
123139 Test1 67 0.15
123160 Test1 74 0.15
我真的只是想弄清楚如何处理这两个文件,并使他们做我想要的。我被告知使用
string[] lines = File.ReadAllLines(path)
读取行,
string[] data = line.Split(''t')
分隔制表符分隔的行。
我不是要别人帮我写这个程序。只是需要一些帮助。朝正确方向的推动。我真的是通过观察来学习的,我从来没有见过任何人按照我的指示去做。如果你们有任何问题要问,请随时提问!
提前感谢。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project2
{
class Program
{
static void Main()
{
// Change the path to match where you save the files.
//const string STUDENT_FILE = @"C:'Temp'Students.txt";
//const string ASSIGNMENT_FILE = @"C:'Temp'Assignments.txt";
const string STUDENT_FILE = @"C:'Users'PleaseGod'Desktop'Project 2'Students.txt";
const string ASSIGNMENT_FILE = @"C:'Users'PleaseGod'Desktop'Project 2'Assignments.txt";
// First, load the student and assignment data from text files.
Students students = FileRoutines.LoadStudents(STUDENT_FILE);
FileRoutines.LoadAssignments(ASSIGNMENT_FILE, students);
// Next, display information about the students and grades.
Console.WriteLine("The students and their average are:");
foreach (Student student in students.StudentList)
{
Console.WriteLine("{0,-20}'t{1:N2}", student.FullName, student.GetAverage());
}
DisplayStudentsByGrade(students, LetterGrade.A);
DisplayStudentsByGrade(students, LetterGrade.B);
DisplayStudentsByGrade(students, LetterGrade.C);
DisplayStudentsByGrade(students, LetterGrade.D);
DisplayStudentsByGrade(students, LetterGrade.F);
Student[] studentsWithHighestAverage = students.GetStudentsWithHighestAverage();
Console.WriteLine("'nThe students with the highest average are:");
foreach (Student student in studentsWithHighestAverage)
{
Console.WriteLine("{0,-20}'t{1:N2}", student.FullName, student.GetAverage());
}
Console.WriteLine("'nThe class average is: {0:N2}", students.GetClassAverage());
Console.WriteLine("'nThe class average on HW2 is: {0:N2}", students.GetAverageGradeOnAssignment("HW2"));
Console.ReadLine();
}
private static void DisplayStudentsByGrade(Students students, LetterGrade letterGrade)
{
Student[] studentList = students.GetStudentsByGrade(letterGrade);
Console.WriteLine("'nThe following students have a grade of {0}:", letterGrade);
if (studentList.Length > 0)
{
foreach (Student student in studentList)
{
Console.WriteLine("{0,-20}'t{1:N2}", student.FullName, student.GetAverage());
}
}
else
{
Console.WriteLine("<none>");
}
}
}
}
往正确的方向推…有一种使用LINQ解析文件和创建对象列表的优雅解决方案。要从文件中获取学生列表,可以执行以下命令:
public List<Student> LoadStudents(string STUDENT_FILE)
{
var parseQuery = //read all lines from a file
from line in File.ReadAllLines(STUDENT_FILE)
//split every line on Tab delimiter
let split = line.Split(new[] {''t'})
//create new Student object from string array created by split for every line
select new Student()
{
ID = split[0],
FirstName = split[1],
LastName = split[2]
};
//execute parseQuery, your student objects are now in List<Student>
var studentList = parseQuery.ToList();
return studentList;
}
不清楚你想要实现什么,但从我的理解你想知道如何读取文件,那么你可以使用StreamReader。这里已经有很多关于这个主题的问题你可以搜索如何读取TXT文件
试试这样写:
class Student
{
public string mNumber { get; set; }
public string mFirstName { get; set; }
public string mLastName { get; set; }
public Student(string nr, string fName, string lName)
{
mNumber = nr;
mFirstName = fName;
mLastName = lName;
}
}
和循环遍历数据,如:
foreach (string val in data)
{
string[] valArr = val.Split(' ');
Student st = new Student(valArr[0], valArr[1], valArr[2]);
}