C# 带有2个时间数据的LinkedList
我必须从txt文件向linkedlist提供2次数据。 但我无法填写C# 带有2个时间数据的LinkedList,c#,C#,我必须从txt文件向linkedlist提供2次数据。 但我无法填写 StreamReader sr; public void FileReader(string file, LinkedList<Task> Tasks) { string splitter= "."; int TaskIndex= 0; sr = new StreamReader(file); LinkedList<Task> data = new
StreamReader sr;
public void FileReader(string file, LinkedList<Task> Tasks)
{
string splitter= ".";
int TaskIndex= 0;
sr = new StreamReader(file);
LinkedList<Task> data = new LinkedList<Task>();
while (!sr.EndOfStream)
{
string tempString = sr.ReadLine();
if (splitter== tempString)
{
TaskIndex++;
Tasks.Add(data);
}
}
sr.Close();
}
public class Task
{
public TimeSpan FullTime= new TimeSpan(0, 24, 0, 0);
public TimeSpan TaskLength { get; set; }
public TimeSpan Deadline{ get; set; }
public int Penalty{ get; } = 50000;
public Task(TimeSpan TaskLength, TimeSpan Deadline)
{
this.TaskLength= TaskLength;
this.Deadline= Deadline;
}
}
StreamReader-sr;
公共void文件读取器(字符串文件、LinkedList任务)
{
字符串拆分器=“.”;
int TaskIndex=0;
sr=新的StreamReader(文件);
LinkedList数据=新建LinkedList();
而(!sr.EndOfStream)
{
string tempString=sr.ReadLine();
if(拆分器==tempString)
{
TaskIndex++;
任务。添加(数据);
}
}
高级关闭();
}
公开课任务
{
公共时间跨度FullTime=新时间跨度(0,24,0,0);
公共时间跨度任务长度{get;set;}
公共时间跨度截止日期{get;set;}
公共整数惩罚{get;}=50000;
公共任务(时间跨度任务长度、时间跨度截止日期)
{
TaskLength=TaskLength;
这个。截止日期=截止日期;
}
}
txt:前2个数据是TaskLength小时和分钟,后2个数据是截止日期小时和分钟,每行都是一个任务
2,30,5,0
4,0,16,0
1,0,2,0
6,0,14,0
3,30,10,0
2,0,22,0
听起来你想做的是从文件中读取每一行,在逗号字符上拆分该行(并且去掉句点,因为每一行都是任务),将行中的数字解析为整数,从数字中创建两个
TimeSpan
对象,从两个TimeSpan
对象中创建一个task
对象,然后将该任务
添加到链接列表
如果是这种情况,那么下面是一个示例方法,您可以将文件名传递给它,并从文件内容返回一个LinkedList
:
public LinkedList<Task> GetTasksFromFile(string filePath)
{
// This will hold our results from reading the file lines into Tasks
var tasks = new LinkedList<Task>();
// Loop through each line in the file
foreach (string line in File.ReadLines(filePath))
{
// Split the line on the comma and period characters so we get separate values
string[] parts = line.Split(new[] {'.', ','},
StringSplitOptions.RemoveEmptyEntries);
// These will hold the parsed values from each line of text in our file
int lengthHour;
int lengthMinute;
int deadlineHour;
int deadlineMinute;
// int.TryParse will try to convert a string to an int, and will return
// true if successful. It will also set the 'out' parameter to the result.
// We do this on each part from our line of text
// (after ensuring that there are at least 4 parts)
if (parts.Length > 3 &&
int.TryParse(parts[0], out lengthHour) &&
int.TryParse(parts[1], out lengthMinute) &&
int.TryParse(parts[2], out deadlineHour) &&
int.TryParse(parts[3], out deadlineMinute))
{
// If our parsing succeeded, create a new task
// with the results and add it to our LinkedList
TimeSpan length = new TimeSpan(lengthHour, lengthMinute, 0);
TimeSpan deadline = new TimeSpan(deadlineHour, deadlineMinute, 0);
Task task = new Task(length, deadline);
tasks.AddLast(task);
}
}
// Return our linked list back to the caller
return tasks;
}
public LinkedList GetTasksFromFile(字符串文件路径)
{
//这将保存将文件行读入任务的结果
var tasks=newlinkedlist();
//循环浏览文件中的每一行
foreach(File.ReadLines(filePath)中的字符串行)
{
//在逗号和句点字符上拆分行,以便获得单独的值
string[]parts=line.Split(新[]{'.','.','},
StringSplitOptions.RemoveEmptyEntries);
//这些将保存文件中每行文本的解析值
国际长度小时;
国际长度分钟;
int死线小时;
int deadlineMinute;
//TryParse将尝试将字符串转换为int,并返回
//如果成功,则为true。它还将为结果设置“out”参数。
//我们从一行文字的每一部分都这样做
//(确保至少有4个零件后)
如果(零件长度>3&&
内锥虫(零件[0],外长小时)&&
内锥虫(零件[1],外长度分钟)&&
int.TRIPARSE(第[2]部分,截止时间外)&&
int.TRIPARSE(零件[3],超出最后期限分钟))
{
//如果解析成功,请创建一个新任务
//并将其添加到我们的LinkedList
TimeSpan长度=新的TimeSpan(lengthHour,lengthMinute,0);
TimeSpan deadline=新的时间跨度(死线小时、死线分钟,0);
任务=新任务(长度、截止日期);
tasks.AddLast(任务);
}
}
//将我们的链接列表返回给调用方
返回任务;
}
你的票数很接近,所以我认为你应该澄清你所说的“但我不能填写”是什么意思。查看您的代码和数据,我猜在您的FileReader
方法的末尾,data
是空的。这是否正确?数据有一个错误:无法从“LinkedList”转换为“Task”。您从未创建任务
实例,而是将一个LinkedList
(数据
)添加到另一个(任务
)。您需要选择一个要使用的列表,数据
或任务
,然后将任务
添加到其中。