Changeset 4644:7828203cec30 in orange


Ignore:
Timestamp:
05/13/08 15:19:39 (6 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
c73a1c2afd99cb2942a871f8a25671fec2ccd412
Message:

read directed / undirected graph TODO: for now arcs must be before edges

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orangeom/networkoptimization.cpp

    r4624 r4644  
    935935    int n = 0; 
    936936    bool quotation = false; 
     937    container.clear(); 
    937938    string::const_iterator it = s.begin(), end = s.end(), first; 
    938939    for (first = it; it != end; ++it) 
     
    14291430PyObject *NetworkOptimization_readNetwork(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(fn) -> Network") 
    14301431{ 
     1432     
    14311433 
    14321434  PyTRY 
     
    14381440    TExampleTable *table; 
    14391441    PExampleTable wtable; 
    1440   int directed = 0; 
     1442    int directed = 0; 
    14411443    //cout << "readNetwork" << endl; 
    14421444    char *fn; 
     
    14511453    string graphName = ""; 
    14521454    int nVertices = 0; 
    1453  
     1455     
    14541456    if (file.is_open()) 
    14551457    { 
     
    14971499                        PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    14981500                    } 
    1499  
     1501                } 
     1502                else if (stricmp(words[0].c_str(), "*arcs") == 0) 
     1503                { 
     1504                    directed = 1; 
    15001505                    break; 
    15011506                } 
    15021507            } 
    15031508        } 
    1504  
     1509        file.close(); 
     1510    } 
     1511 
     1512    file.open(fn); 
     1513    if (file.is_open()) 
     1514    { 
     1515        // read head 
     1516        while (!file.eof()) 
     1517        { 
     1518            getline (file, line); 
     1519            vector<string> words; 
     1520            int n = getWords(line, words); 
     1521            //cout << line << "  -  " << n << endl; 
     1522            if (n > 0) 
     1523            { 
     1524                if (stricmp(words[0].c_str(), "*vertices") == 0) 
     1525                { 
     1526                    //cout << "Vertices" << endl; 
     1527                    if (n > 1) 
     1528                    { 
     1529                        istringstream strVertices(words[1]); 
     1530                        strVertices >> nVertices; 
     1531                        if (nVertices == 0) 
     1532                        { 
     1533                            file.close(); 
     1534                            PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     1535                        } 
     1536 
     1537                        //cout << "nVertices: " << nVertices << endl; 
     1538                    } 
     1539                    else 
     1540                    { 
     1541                        file.close(); 
     1542                        PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     1543                    } 
     1544 
     1545                    break; 
     1546                } 
     1547            } 
     1548        } 
     1549         
    15051550        graph = new TNetwork(nVertices, 0, directed == 1); 
    15061551        wgraph = graph; 
    1507  
    1508     domain->addVariable(new TIntVariable("index")); 
     1552         
     1553        domain->addVariable(new TIntVariable("index")); 
    15091554        domain->addVariable(new TStringVariable("label")); 
    15101555        domain->addVariable(new TFloatVariable("x")); 
     
    15151560        domain->addVariable(new TStringVariable("bw")); 
    15161561        table = new TExampleTable(domain); 
    1517     wtable = table; 
     1562        wtable = table; 
    15181563 
    15191564        // read vertex descriptions 
     
    16371682                            int i1 = -1; 
    16381683                            int i2 = -1; 
     1684                            int i3 = -1; 
    16391685                            istringstream strI1(words[0]); 
    16401686                            istringstream strI2(words[1]); 
    1641  
     1687                            istringstream strI3(words[2]); 
    16421688                            strI1 >> i1; 
    16431689                            strI2 >> i2; 
    1644  
     1690                            strI3 >> i3; 
     1691                             
    16451692                            if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices)) 
    16461693                            { 
     
    16531700                             
    16541701                            //cout << "i1: " << i1 << " i2: " << i2 << endl; 
    1655                             *graph->getOrCreateEdge(i1 - 1, i2 - 1) = 1; 
     1702                            *graph->getOrCreateEdge(i1 - 1, i2 - 1) = i3; 
    16561703                        } 
    16571704                    } 
     
    16591706            } 
    16601707        } 
     1708         
    16611709        // read edges 
    16621710        n = getWords(line, words); 
     
    16701718                    vector<string> words; 
    16711719                    int n = getWords(line, words); 
     1720                     
    16721721                    //cout << line << "  -  " << n << endl; 
    16731722                    if (n > 1) 
     
    16751724                        int i1 = -1; 
    16761725                        int i2 = -1; 
     1726                        int i3 = -1; 
    16771727                        istringstream strI1(words[0]); 
    16781728                        istringstream strI2(words[1]); 
    1679  
     1729                        istringstream strI3(words[2]); 
    16801730                        strI1 >> i1; 
    16811731                        strI2 >> i2; 
     1732                        strI3 >> i3; 
    16821733 
    16831734                        if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices)) 
     
    16901741                            continue; 
    16911742 
    1692                         *graph->getOrCreateEdge(i1 - 1, i2 - 1) = 1; 
    1693                         /**graph->getOrCreateEdge(i2 - 1, i1 - 1) = 1;*/ 
     1743                        *graph->getOrCreateEdge(i1 - 1, i2 - 1) = i3; 
     1744                         
     1745                        if (directed == 1) { 
     1746                            *graph->getOrCreateEdge(i2 - 1, i1 - 1) = i3; 
     1747                        } 
    16941748                    } 
    16951749                } 
Note: See TracChangeset for help on using the changeset viewer.