void
affx::TsvFileDiff::p_diff_2line(affx::TsvFile& tsv1, affx::TsvFile& tsv2)
{
  p_linenums(tsv1,tsv2);
  printf("-");
  p_line(tsv1);
  p_linenums(tsv1,tsv2);
  printf("+");
  p_line(tsv2);
}
int
affx::TsvFileDiff::diffData(affx::TsvFile& tsv1, affx::TsvFile& tsv2)
{
  int start_diff_cnt=m_diff_cnt;
  std::string val1,val2;
    
  //
  open_residuals(m_residuals_filename,tsv1,tsv2);

  //
  tsv1.rewind();
  tsv2.rewind();

  //
  tsv1.nextLine();
  tsv2.nextLine();

  //
  while ((!tsv1.eof())||(!tsv2.eof())) {
    //
    int tsv1_clvl=tsv1.lineLevel();
    int tsv2_clvl=tsv2.lineLevel();
    //
    while (((tsv1_clvl>tsv2_clvl)||tsv2.eof())&&(!tsv1.eof())) {
      if (p_inc()) {
        p_linenums(tsv1,tsv2);
        printf("-");
        p_line(tsv1);
      }
      m_diff_cnt+=tsv1.getColumnCount(tsv1_clvl);
      tsv1.nextLine();
      tsv1_clvl=tsv1.lineLevel();
    }
    //
    while (((tsv2_clvl>tsv1_clvl)||tsv1.eof())&&(!tsv2.eof())) {
      if (p_inc()) {
        p_linenums(tsv1,tsv2);
        printf("+");
        p_line(tsv2);
      }
      m_diff_cnt+=tsv2.getColumnCount(tsv2_clvl);
      tsv2.nextLine();
      tsv2_clvl=tsv2.lineLevel();
    }
    //
    if ((tsv1_clvl>=0)&&(tsv2_clvl>=0)) {
      int tsv1_cidx_max=tsv1.getColumnCount(tsv1_clvl);
      int tsv2_cidx_max=tsv2.getColumnCount(tsv2_clvl);
      //
      int cidx_max;
      if (tsv1_cidx_max<tsv2_cidx_max) {
        cidx_max=tsv2_cidx_max;
      } else {
        cidx_max=tsv1_cidx_max;
      }
      
      // count diffs on the line
      int line_diff_cnt=0;
      double d1,d2;
      for (int cidx=0;cidx<cidx_max;cidx++) {
        tsv1.get(tsv1_clvl,cidx,val1);
        tsv2.get(tsv2_clvl,cidx,val2);
        // the same?
        if (val1==val2) {
          // record the base value
          if (m_residuals_tsv!=NULL) {
            // numeric?
            if (tsv1.get(tsv1_clvl,cidx,d1)==affx::TSV_OK) {
              // put a zero
              m_residuals_tsv->set(tsv1_clvl,cidx,"0");
            } else {
              // put the value
              m_residuals_tsv->set(tsv1_clvl,cidx,val1);
            }
          }
        }
        // Not string equal -- check for numeric diff
        else if ((tsv1.get(tsv1_clvl,cidx,d1)==affx::TSV_OK) &&
                 (tsv2.get(tsv2_clvl,cidx,d2)==affx::TSV_OK)) {
          double d_diff=d1-d2;
          // output the result...
          if (m_residuals_tsv!=NULL) {
            m_residuals_tsv->set(tsv1_clvl,cidx,d_diff);
          }
          // if small, it isnt a diff
          if (!((m_opt_max_diff>0.0) && (fabs(d_diff)<=m_opt_max_diff))) {
            // too big -- mark it down as a diff.
            m_diff_cnt++;
            line_diff_cnt++;
            //
          }
        }
        // normal text diff
        else {
          if (m_residuals_tsv!=NULL) {
            m_residuals_tsv->set(tsv1_clvl,cidx,"'"+val1+"'/'"+val2+"'");
          }
        }
      }
      
      // output the result line
      if (m_residuals_tsv!=NULL) {
        m_residuals_tsv->writeLevel(tsv1_clvl);
      }

      // print unchanged lines?
      if ((m_opt_print_same || (line_diff_cnt!=0)) &&
          (p_inc())) {
        //
        if (line_diff_cnt==0) {
          p_linenums(tsv1,tsv2);
          printf(" ");
          p_line(tsv1);
        }
        else if (m_opt_print_format==TsvFileDiff::FMT_1) {
          p_diff_1line(tsv1,tsv2);
        } 
        else if (m_opt_print_format==TsvFileDiff::FMT_2) {
          p_diff_2line(tsv1,tsv2);
        }
        else {
          Err::errAbort("Bad format");
        }
      }
    }
    
    //
    tsv1.nextLine();
    tsv2.nextLine();
  }
  
  close_residuals();
  
  return m_diff_cnt-start_diff_cnt;
}
Esempio n. 3
0
int main(int argc, char * argv[])
{
    
    void b2grandpwr(void);
    void s2grandpwr(void);
    void b2imaxx(void);
    void b2huake(void);
    void p_line(void);
    void p_start();
    void yosunpi(void);
    /*
     * progam format: mypi pihead billto shipto payment itemsnumber partnumber rsl qty
     *                mypi yosun b2globalic s2globalic TT 2 ADS8320E/2K5 3.00 5,000 ADS8345BN 6.00 2,000
     * PI head 
     * 1    yosun
     * 2    globalic
     */
    int pihead;
    int b2addr;
    int s2addr;
    /*
     * check pihead
     */
    if(argv[1]=="yosun")
        pihead=1;
    else if(argv[1]=="globalic")
        pihead=2;
    else
        pihead=0;
    /*
     * check bill to address 
     */
    if(argv[2]=="b2grandpwr")
        b2addr=1;
    else if(argv[2]=="imaxx")
        b2addr=2;
    else if(argv[2]=="huake")
        b2addr=3;
    else if(argv[2]=="fuyang")
        b2addr=4;
    else if(argv[2]=="sense")
        b2addr=5;
    else if(argv[2]=="ereach")
        b2addr=6;
    else 
        b2addr=0;
    /*
     * check ship to address
     */
    if(argv[2]=="b2grandpwr")                                                                                                                                   
        s2addr=1;
    else if(argv[2]=="imaxx")
        s2addr=2;
    else if(argv[2]=="huake")
        s2addr=3;
    else if(argv[2]=="fuyang")
        s2addr=4;
    else if(argv[2]=="sense")
        s2addr=5;
    else if(argv[2]=="ereach")
        s2addr=6;
    else 
        s2addr=0;
    
    p_line();
    b2grandpwr();
    s2grandpwr();
    b2imaxx();
    b2huake();
    p_start();

    //printf("test\n");
    return 0;
}