1398{
1399 wxTextFile mFile(m_mFile.GetFullPath());
1400 if(!mFile.Open()) return false;
1401
1402
1403 wxString fileTxt = "";
1404 for(wxString line = mFile.GetFirstLine(); !mFile.Eof(); line = mFile.GetNextLine()) {
1405
1406 if(line.Trim()[0] != '%') {
1407
1408 if(line.Find("mpc.baseMVA") != wxNOT_FOUND) {
1409 if(!line.AfterFirst('=').BeforeFirst(';').ToCDouble(&m_mvaBase)) return false;
1410 }
1411 if(line.Find("mpc.bus ") != wxNOT_FOUND) {
1412 wxStringTokenizer busStrTok = GetMFileTokenData(mFile, line);
1413 while(busStrTok.HasMoreTokens()) {
1414 BusData* busData = new BusData();
1415 wxString busDataStr = busStrTok.GetNextToken();
1416 char tokenChar = '\t';
1417 if(busDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1418
1419 wxStringTokenizer busDataStrTok(busDataStr, tokenChar);
1420
1421 busData->id = wxAtoi(busDataStrTok.GetNextToken());
1422 busData->type = wxAtoi(busDataStrTok.GetNextToken());
1423 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->pd)) return false;
1424 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->qd)) return false;
1425 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->gs)) return false;
1426 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->bs)) return false;
1427 busData->area = wxAtoi(busDataStrTok.GetNextToken());
1428 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->voltage)) return false;
1429 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->angle)) return false;
1430 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->baseVoltage)) return false;
1431
1432 m_busData.push_back(busData);
1433 }
1434 }
1435 if(line.Find("mpc.gen ") != wxNOT_FOUND) {
1436 wxStringTokenizer genStrTok = GetMFileTokenData(mFile, line);
1437 while(genStrTok.HasMoreTokens()) {
1438 GenData* genData = new GenData();
1439 wxString genDataStr = genStrTok.GetNextToken();
1440 char tokenChar = '\t';
1441 if(genDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1442
1443 wxStringTokenizer genDataStrTok(genDataStr, tokenChar);
1444 genData->busID = wxAtoi(genDataStrTok.GetNextToken());
1445 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->pg)) return false;
1446 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->qg)) return false;
1447 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->maxReactivePower))
1448 return false;
1449 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->minReactivePower))
1450 return false;
1451 genDataStrTok.GetNextToken();
1452 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->baseMVA)) return false;
1453 double machineStatus = 0;
1454 if(!genDataStrTok.GetNextToken().ToCDouble(&machineStatus))
1455 return false;
1456 genData->isOnline = machineStatus > 1e-3 ? true : false;
1457
1458 m_genData.push_back(genData);
1459 }
1460 }
1461 if(line.Find("mpc.branch") != wxNOT_FOUND) {
1462 wxStringTokenizer branchStrTok = GetMFileTokenData(mFile, line);
1463 while(branchStrTok.HasMoreTokens()) {
1464 BranchData* branchData = new BranchData();
1465 wxString branchDataStr = branchStrTok.GetNextToken();
1466 char tokenChar = '\t';
1467 if(branchDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1468
1469 wxStringTokenizer branchDataStrTok(branchDataStr, tokenChar);
1470
1471 int fromBus = wxAtoi(branchDataStrTok.GetNextToken());
1472 int toBus = wxAtoi(branchDataStrTok.GetNextToken());
1473 branchData->busConnections = std::make_pair(fromBus, toBus);
1474 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->resistance)) return false;
1475 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->indReactance))
1476 return false;
1477 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->capSusceptance))
1478 return false;
1479 branchDataStrTok.GetNextToken();
1480 branchDataStrTok.GetNextToken();
1481 branchDataStrTok.GetNextToken();
1482 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->tap)) return false;
1483 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->phaseShift))
1484 return false;
1485 double branchStatus = 0;
1486 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchStatus))
1487 return false;
1488 branchData->isOnline = branchStatus > 1e-3 ? true : false;
1489
1490 m_branchData.push_back(branchData);
1491 }
1492 }
1493 if(line.Find("mpc.bus_name") != wxNOT_FOUND) {
1494 wxString dataStr = "";
1495 while(line.Find('}', true) == wxNOT_FOUND) {
1496 dataStr += line;
1497 line = mFile.GetNextLine();
1498 }
1499 dataStr += line;
1500 dataStr = dataStr.AfterFirst('{').BeforeFirst('}');
1501 wxStringTokenizer dataStrTok(dataStr, ";");
1502 for(auto it = m_busData.begin(), itEnd = m_busData.end(); it != itEnd; ++it) {
1503 if(dataStrTok.HasMoreTokens())
1504 (*it)->busName = dataStrTok.GetNextToken().AfterFirst('\'').BeforeFirst('\'');
1505 }
1506 }
1507 }
1508 }
1509
1510
1511 return true;
1512}