Я достиг большого прогресса, но теперь у меня проблема с загрузкой файла. Вот класс с методом файлов загрузки снова:Ошибка загрузки файла
public class BunchOfDeliverables
{
private List<Person> myPersons;
private List<Deliverable> myDeliverables;
public BunchOfDeliverables()
{
this.myPersons = new List<Person>();
this.myDeliverables = new List<Deliverable>();
}
public List<Person> Persons { get { return this.myPersons; } }
public List<Deliverable> Deliverables { get { return this.myDeliverables; } }
public void LoadPersonsFromFile(String filename)
{
StreamReader sr = null;
try
{
sr = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.Read));
String name, street, housenr, postalcode, city;
name = sr.ReadLine();
while (name != null)
{
street = sr.ReadLine();
housenr = sr.ReadLine();
postalcode = sr.ReadLine();
city = sr.ReadLine();
this.myPersons.Add(new Person(name, street, Convert.ToInt32(housenr), postalcode, city));
name = sr.ReadLine();
name = sr.ReadLine(); //and again read a line, because of the delimiter (line with the stars)
}
}
catch (IOException) { }
finally
{
if (sr != null) sr.Close();
}
}
public void LoadDeliverablesFromFile(String filename)
{
StreamReader sr = null;
try
{
sr = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.Read));
String s;
s = sr.ReadLine();
while (s != null)
{
String[] items = s.Split();
this.myDeliverables.Add(new Deliverable(Convert.ToInt32(items[0]), Convert.ToInt32(items[1]), this.myPersons[Convert.ToInt32(items[2])]));
s = sr.ReadLine();
}
}
catch (IOException) { }
finally
{
if (sr != null) sr.Close();
}
}
public void AddPerson(Person p)
{
this.myPersons.Add(p);
}
public Deliverable FindDeliverable(int id)
{
foreach (Deliverable d in this.myDeliverables)
{
if (d.ID == id)
{
return d;
}
}
return null;
}
public void AddDeliverable(Deliverable d)
{
if (FindDeliverable(d.ID) == null)
{
myDeliverables.Add(d);
}
else
{
throw new Exception("Be aware: nothing is added!!!");
}
}
И здесь - в виде I`ve инициализируются их:
public partial class Form1 : Form
{
BunchOfDeliverables d;
public Form1()
{
InitializeComponent();
d = new BunchOfDeliverables();
d.LoadDeliverablesFromFile("../../data/deliverables.txt");
d.LoadPersonsFromFile("../../data/persons.txt");
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
foreach (Person per in d.Persons)
{
listBox1.Items.Add(per);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void ViewDeliv_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
foreach (Deliverable deliv in d.Deliverables)
{
listBox1.Items.Add(deliv);
}
}
Теперь для лиц загрузки файлов он работает как шарм, ничто не пойдет не так, но как только я попытаюсь загрузить файл Deliverables, возникает следующая ошибка:
Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс "на этой линии:
" this.myDeliverables.Add (новый Deliverable (Convert.ToInt32 (пункты [0]), Convert.ToInt32 (пункты [1]), this.myPersons [Преобразовать. ToInt32 (пункты [2])]));»
Вот как файл Deliverables структурирована небольшой пример (без пустых строк):
1 350 1
2 700 5
3 360 7
4 360 6
Любая помощь будет оценен по достоинству!
Во-первых, вы предоставили * way * больше кода, чем это действительно актуально. Вы могли бы сократить это примерно до 10 строк кода, которые все еще показали бы проблему. Во-вторых, предположительно «элементы» не имеют трех элементов для строки, которая вызывает проблему. Какую диагностику вы провели? Вы перешли в отладчик? Добавлена регистрация? –
Я не проверил диагностику или не прошел через отладчик. Я изучаю компьютерную науку в университете в течение 1-го года, и мы до сих пор не сделали таких вещей, только действительно базовые вещи (этот код не мой, он был дан, и мне просто нужно добавить некоторые методы и прочее, но я пришел к выводу что у данного кода была ошибка, которую я написал выше). –
«Вот как файл результатов структурирован с небольшим примером ** (без пустых строк): **« * hint: * Как вы думаете, что произойдет, если вы назовете «Разделить» пустую строку? – Tim