void Sistema::cargar(std::istream & is) { std::string non; //adelanto hasta el campo getline(is, non, '{'); getline(is, non, '{'); is.putback('{'); //cargo el campo _campo.cargar(is); // cargo todos los drones // adelanto hasta encontrar donde empieza cada drone ({) o hasta llegar al ] que // es donde termina la lista de drones char c; while (c != ']') { is.get(c); if (c == '{') { is.putback('{'); Drone d; d.cargar(is); _enjambre.push_back(d); } } // despues de los drones obtengo todo hasta el final que son los estados de cultivos getline(is, non); Secuencia<std::string> estadosCultivosFilas; // con el substr saco el " " inicial y el } final! estadosCultivosFilas = cargarLista(non.substr(1, non.length()-2), "[", "]"); // este vector va a tener todos los estados pero "aplanado", todos en hilera // y cuando los asigne voy accediendolo como todosEstadosCultivos[n_fila*ancho + posicion en Y] Secuencia<std::string> todosEstadosCultivos; int n = 0; while (n < estadosCultivosFilas.size()) { Secuencia<string> tmp = splitBy(estadosCultivosFilas[n].substr(1, estadosCultivosFilas[n].length() - 2), ","); todosEstadosCultivos.insert(todosEstadosCultivos.end(), tmp.begin(), tmp.end()); n++; } // creo la grilla de estados con las dimensiones correctas Dimension dim; dim.ancho = estadosCultivosFilas.size(); dim.largo = todosEstadosCultivos.size() / estadosCultivosFilas.size(); _estado = Grilla<EstadoCultivo>(dim); // asigno todos los estados dentro de la grilla int x = 0; while (x < dim.ancho) { int y = 0; while (y < dim.largo) { _estado.parcelas[x][y] = dameEstadoCultivoDesdeString(todosEstadosCultivos[x*dim.ancho+y]); y++; } x++; } //gane :) }