C# 我能';无法从FileText C中读取#
我必须在学生、班级和年份之间建立这样的联系:一年可以有一个或多个班级,一个班级可以有一个或多个学生 我用一个通用列表做了这个。问题是我必须从一个C# 我能';无法从FileText C中读取#,c#,oop,generic-list,C#,Oop,Generic List,我必须在学生、班级和年份之间建立这样的联系:一年可以有一个或多个班级,一个班级可以有一个或多个学生 我用一个通用列表做了这个。问题是我必须从一个.txt文件中获取信息,但我不知道怎么做 我的文件是这样的: (Year,Class,Name,Surname,Average). 1 314 George Andrew 8 2 324 Popescu Andrei 9 2 323 Andreescu Bogdan 10 3 332 Marin D
.txt
文件中获取信息,但我不知道怎么做
我的文件是这样的:
(Year,Class,Name,Surname,Average).
1 314 George Andrew 8
2 324 Popescu Andrei 9
2 323 Andreescu Bogdan 10
3 332 Marin Darius 9
3 332 Constantin Roxana 10
代码:
公共班级学生
{
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共整数平均值{get;set;}
}
}
公共类Grupa
{
公共int名称{get;set;}
公共列表集合学生{get;set;}
公共Grupa()
{
SetStudent=新列表();
}
公开作废印刷品()
{
//Console.WriteLine(“Grupa:+this.Name”);
控制台。书写线(“Studentii din grupa:”);
foreach(此.SetStudent中的学生s)
{
Console.WriteLine(“+s.Name+”+s.姓氏+”--“+s.Average+”\n”);
}
}
}
公开课
{
公共整数{get;set;}
公共列表SetGrupa{get;set;}
公营
{
SetGrupa=新列表();
}
公开作废印刷品()
{
Console.WriteLine(“Anul:+this.Anul”);
控制台写线(“Grupele din acest an:”);
foreach(在这个.SetGrupa中为Grupa g)
{
Console.WriteLine(“+g.Name”);
}
}
}
string[]lines=System.IO.File.ReadAllLines(@“D:\C#\Tema1\Tema1.txt”);
System.Console.WriteLine(“Content Tema1.txt=\n”);
foreach(行中的字符串行)
{
Console.WriteLine(“\t”+行);
}
Console.WriteLine(“\n关闭”);
System.Console.ReadKey();
}
您也可以对该类型的平面文件使用.NETTextFieldParser
:
var studentList = new List<Student>();
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser("<file path>");
parser.SetFieldWidths(4, 4, 12, 8, 2);
while (!parser.EndOfData)
{
string[] line = parser.ReadFields();
var student = new Student();
student.Year = int.Parse(line[0]);
student.Class = int.Parse(line[1]);
student.Name = line[2].Trim();
student.Surname = line[3].Trim();
student.Average = int.Parse(line[4]);
studentList.Add(student);
}
var studentList=newlist();
var parser=新的Microsoft.VisualBasic.FileIO.TextFieldParser(“”);
SetFieldWidths(4,4,12,8,2);
而(!parser.EndOfData)
{
string[]line=parser.ReadFields();
var student=新学生();
student.Year=int.Parse(第[0]行);
student.Class=int.Parse(第[1]行);
student.Name=行[2].Trim();
student.姓氏=第[3]行.Trim();
student.Average=int.Parse(第[4]行);
学生列表。添加(学生);
}
您只需在SetFieldWidths
函数中设置字段长度。您的问题很模糊,您是否在寻找这样的Linq:
// Parsing into objects
var data = System.IO.File
.ReadLines(@"D:\C#\Tema1\Tema1.txt")
.Skip(1) //TODO: comment down this line if your file doesn't have a caption
.Select(line => line.Split('\t'))
.Select(items => new { // or "new Student() {" if you've designed a Student class
Year = int.Parse(items[0]),
Class = int.Parse(items[1]),
Name = items[2],
Surname = items[3],
Average = int.Parse(items[4]), //TODO: Is it Int32 or Double?
});
...
// combining back:
String result = String.Join(Environment.NewLine, data
.Select(item => String.Join("\t",
item.Year, item.Class, item.Name, item.Surname, item.Average));
Console.Write(result);
如果你想完全控制你想做的事情,我建议为每个studet创建一个类 粗略的方法:
namespace ConsoleApplication1
{
class Student
{
//Members of class
public int Year;
public int Class;
public string FirstName;
public string LastName;
public int Average;
/// <summary>
/// Gets a line and creates a student object
/// </summary>
/// <param name="line">The line to be parsed</param>
public Student(string line)
{
//being parsing
//split by space
List<String> unfiltered = new List<string>(line.Split(' '));
//a list to save filtered data
List<string> filtred = new List<string>();
//filter out empty spaces...
//There exist much smarter ways...but this does the job
foreach (string entry in unfiltered)
{
if (!String.IsNullOrWhiteSpace(entry))
filtred.Add(entry);
}
//Set variables
Year = Convert.ToInt32(filtred[0]);
Class = Convert.ToInt32(filtred[1]);
FirstName = filtred[2];
LastName = filtred[3];
Average = Convert.ToInt32(filtred[4]);
}
}
class Program
{
static void Main(string[] args)
{
var data = System.IO.File.ReadAllLines(@"d:\data.txt");
//a list to hold students
List<Student> students = new List<Student>();
foreach (var line in data)
{
//create a new student and add it to list
students.Add(new Student(line));
}
//to test, write all names
foreach (var student in students)
{
Console.WriteLine(student.FirstName + " " + student.LastName + Environment.NewLine);
}
//you can calculate average of all students averages!
int sum = 0;
for (int i = 0; i < students.Count; i++)
{
sum += students[i].Average;
}
//print average of all students
Console.WriteLine("Average mark of all students: " + (sum / students.Count));
Console.ReadKey();
}
}
}
命名空间控制台应用程序1
{
班级学生
{
//班级成员
公共国际年;
公共int类;
公共字符串名;
公共字符串LastName;
公共整数平均数;
///
///获取一行并创建一个学生对象
///
///要分析的行
公立学生(弦线)
{
//正在解析
//按空间分割
列表未筛选=新列表(行分割(“”));
//保存筛选数据的列表
List FILTED=新列表();
//过滤掉空的空间。。。
//有很多更聪明的方法…但这确实有效
foreach(未筛选中的字符串条目)
{
如果(!String.IsNullOrWhiteSpace(条目))
过滤。添加(条目);
}
//设置变量
年份=转换为32(过滤[0]);
Class=Convert.ToInt32(过滤[1]);
FirstName=filted[2];
LastName=filted[3];
平均值=转换为32(过滤[4]);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var data=System.IO.File.ReadAllLines(@“d:\data.txt”);
//容纳学生的名单
列出学生=新建列表();
foreach(数据中的var行)
{
//创建新学员并将其添加到列表中
添加(新学生(行));
}
//要进行测试,请写入所有名称
foreach(学生中的var学生)
{
Console.WriteLine(student.FirstName+“”+student.LastName+Environment.NewLine);
}
//你可以计算所有学生的平均数!
整数和=0;
for(int i=0;i
您是如何准确阅读的?最好也看看你的代码。Andrei和Roxana是姓氏,是的。@John你想要的输出是什么样子的?所以实际上你这里有读取文件的代码。什么不起作用?将行拆分为字段?可能重复我必须从我的txt中获取所有信息,我不能手动介绍。我发布的代码读取文本文件并创建学生对象。它不是手动介绍…但我真的不明白你说的手动介绍是什么意思。也许试一下代码,看看它能做些什么,也许这有助于理解。你是说你有单独的小组、学生、分数等文件吗?真的不清楚你想做什么。不,我没有单独的文件。我只有一个文件。在我的代码中我有我的连接,我想告诉你我是如何建立这些连接的。我真的不明白你到底想做什么。也许你可以试着在你的问题中一步一步地写出来?我有一个转折点。在items=>new{An=int.Parse(items[0])中,
namespace ConsoleApplication1
{
class Student
{
//Members of class
public int Year;
public int Class;
public string FirstName;
public string LastName;
public int Average;
/// <summary>
/// Gets a line and creates a student object
/// </summary>
/// <param name="line">The line to be parsed</param>
public Student(string line)
{
//being parsing
//split by space
List<String> unfiltered = new List<string>(line.Split(' '));
//a list to save filtered data
List<string> filtred = new List<string>();
//filter out empty spaces...
//There exist much smarter ways...but this does the job
foreach (string entry in unfiltered)
{
if (!String.IsNullOrWhiteSpace(entry))
filtred.Add(entry);
}
//Set variables
Year = Convert.ToInt32(filtred[0]);
Class = Convert.ToInt32(filtred[1]);
FirstName = filtred[2];
LastName = filtred[3];
Average = Convert.ToInt32(filtred[4]);
}
}
class Program
{
static void Main(string[] args)
{
var data = System.IO.File.ReadAllLines(@"d:\data.txt");
//a list to hold students
List<Student> students = new List<Student>();
foreach (var line in data)
{
//create a new student and add it to list
students.Add(new Student(line));
}
//to test, write all names
foreach (var student in students)
{
Console.WriteLine(student.FirstName + " " + student.LastName + Environment.NewLine);
}
//you can calculate average of all students averages!
int sum = 0;
for (int i = 0; i < students.Count; i++)
{
sum += students[i].Average;
}
//print average of all students
Console.WriteLine("Average mark of all students: " + (sum / students.Count));
Console.ReadKey();
}
}
}