首页 新闻 会员 周边

OTL库的otl_stream有类似fstream的seekg函数一样的函数吗?

0
悬赏园豆:30 [已解决问题] 解决于 2015-04-16 15:44

otl_stream有类似fstream的seekg函数一样的函数吗?如果没有的话如何实现类似功能?假如一个行中有5个元素我只需要读第2,3,5个元素,如何做?难道必须将5个元素读到一个数组中再读取吗?但是我不知道第1,4个元素的数据类型,所以读第1,4个元素时不知道用什么类型的变量作为流操作符>>右边的操作变量,我只知道第2,3,5个元素的数据类型,这该如何处理呢?如果otl_stream实现了类似fstream类的seekg函数的功能,那就好办了,但是不知道有没有??那位高手能指点一下,不胜感激啊!

解决的话给29分,我总共就这么多分,谢谢

Patrickz10的主页 Patrickz10 | 初学一级 | 园豆:7
提问于:2015-04-16 11:33
< >
分享
最佳答案
0

otl_column_desc * describe_select(int & desc_len)

收获园豆:30
Launcher | 高人七级 |园豆:45045 | 2015-04-16 11:42

哦,明白,用这个函数得到各个列的数据类型,但是otl_stream不能直接超过忽略某些列吗?

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 11:50

@Patrickz10: 不能,你可以通过它提供的基本函数封装一个 seek 操作。

Launcher | 园豆:45045 (高人七级) | 2015-04-16 11:52

@Launcher: 谢谢,那我看看该如何封装?

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 11:56

@Launcher: 似乎要实现不是很难,至少可行性很高,因为OTL里面也是用数组存储行数据,读取时用cur_col定位读取数组哪个位置,不知道OTL为什么就不顺便实现seekg的功能呢?我想改它的代码,不过毕竟我没有全部读透所有程序,怕影响到其他,而且改了以后若需要更新OTL版本很麻烦,所以还是想通过它提供的基本函数在外部扩展封装一个 seek 操作,你能告诉我它提供了哪些基本函数可以用来实现seekg函数吗?

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 12:13

@Patrickz10: 假设执行 select f1,f2 from t1 返回 10 行,那么你如何读取这 10 行数据的?

Launcher | 园豆:45045 (高人七级) | 2015-04-16 12:27

@Launcher: 大概是这样吧:

double f1, f2;
try{
    otl_stream i(50, sql.c_str(), db);
    while (!i.eof())    {
        i >> f1;
        i >> f2;
    }
}
catch (otl_exception &p){
    throw p;
}

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 12:39

@Patrickz10: 你把重载的 >> 操作符的源码贴出来看看。

Launcher | 园豆:45045 (高人七级) | 2015-04-16 12:49

@Launcher: 不好意思,刚出去忙,重载>>代码(假设右边变量是char类型):

  OTL_TMPL_SELECT_STREAM &operator>>(char &c) {
    check_if_executed();
    if (eof_intern())
      return *this;
    get_next();
    if (check_type(otl_var_char) && !eof_intern()) {
      c = *OTL_RCAST(char *, sl[cur_col].val(this->cur_row));
      look_ahead();
    }
    return *this;
  }

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 15:07

@Patrickz10:数据存储在这里的吧:sl[cur_col].val(this->cur_row)),看能单独增加 cur_col 和 cur_row 的值不?

Launcher | 园豆:45045 (高人七级) | 2015-04-16 15:10

@Launcher: 谢谢你的提醒,有一个get_next函数可单独递增cur_col的值,看来我增加一点代码就行了!

Patrickz10 | 园豆:7 (初学一级) | 2015-04-16 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册