class file { public Tuple,List> readFile() { List zConstraintsList = new List(); List constraintsList = new List(); //read file "input.txt" line by line string line; StreamReader file = new StreamReader("input.txt"); while ((line = file.ReadLine()) != null) { // if line contains "min" or "max" if (line.Contains("min") || line.Contains("max")) { zConstraints constraints = new zConstraints(); if (line.Contains("min")) { constraints.minMax = "min"; } else { constraints.minMax = "max"; } // remove "min" or "max" from line line = line.Remove(0, line.IndexOf(constraints.minMax) + constraints.minMax.Length); // split line by " " string[] lineArray = line.Split(' '); //remove empty elements from array lineArray = lineArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); // add variables to constraints.variables after parsing them to float List variables = new List(); foreach (string variable in lineArray) { variables.Add(float.Parse(variable)); } constraints.values = variables; // add constraints to list zConstraintsList.Add(constraints); } else { // split line by " " string[] lineArray = line.Split(' '); //remove empty elements from array lineArray = lineArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); // for each element in array Constraints constraints = new Constraints(); List variables = new List(); foreach (string variable in lineArray) { if (variable.Contains("=") || variable.Contains(">") || variable.Contains("<")) { constraints.sign = variable; } else { variables.Add(float.Parse(variable)); } } constraints.values = variables; constraintsList.Add(constraints); } } file.Close(); return new Tuple, List>(zConstraintsList, constraintsList); } } class zConstraints { public string minMax; public List values; } class Constraints { public List values; public string sign; }