У меня есть огромный файл, который содержит геометрические объекты с их координатами рядом с ними.формат выглядит следующим образом: прямоугольник, (42,25), (68,25), (68,70), (42,70)
Я хочу прочитать каждое число отдельно и сохранить его в массиве какПозже я обработаю эти данные, чтобы найти области фигур и периметры.
string line = ""; // A string for reading lines from the text file
ifstream readFile("Input_Points.txt"); // Opening the input file
string name = ""; // A string to store the type of the shape
while(getline(readFile,line)) {
// Loop through the file lines
stringstream iss(line); // Instantiate stringstream with the current line just read
getline(iss, name, ','); // Parse token until the first comma and store it in name
Shape * obj = gobj[name]; //Fetch the corresponding object from map using name
if ( obj != NULL ) {
// If it can find an object with name index
obj = obj->clone(iss); // Clone an object of the same type
cout << name << ":" << obj->area() << ":" << obj->perimeter() << "\n"; // Calculate area and print it
delete (obj); // delete the object
}
else
cout << "Undefined Object Identifier\n"; // Cannot find object type in map
}
и две функции, которыми я управляю данными
void Square::initialize (stringstream & ss)
{
for (int i = 0; i < 2; i++) {
sscanf(ss,",(%lf,%lf)", points[i].X, points[i].Y);
}
for (int i = 0; i < 2; i++) {
LineLength[i] = points[(i + 1)%2] - points[i];
}
}
Shape * Square::clone (stringstream & ss) { //can be done with templates
Square * square = new Square();
square->initialize(ss);
return square;
}
sscanf не делает то, что я хочу здесь, и я провел большой поиск и не смог найтичто-то похожее, что выполняет то, что я хочу сделать на строковых потоках.