精华内容
下载资源
问答
  • 数据窗口pb9转成pb7格式:在pb9窗口的源文件件中删除文中的文字后保存,即可在pb7中打开使用
  • PB读写JSON格式数据

    2015-07-17 11:16:32
    PB写的对JSON数据格式的控制,解决WEB上rest接口问题
  • Python 转化成 PB 格式数据.pdf
  • Python 转化成 PB 格式数据

    千次阅读 2020-09-08 15:26:54
    可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 Protocol Buffers 简称为 protobuf 或 pb,下面是使用 python 解析 pb。 二、安装 下载目标语言的编译器:下载地址 安装: ...

    一、概述

    Protocol Buffers 是 Google 公司开发的一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

    Protocol Buffers 简称为 protobuf 或 pb,下面是使用 python 解析 pb。

    二、安装

    1. 下载目标语言的编译器:下载地址

    2. 安装:

    $ ./configure  
    $ make  
    $ sudo make install 
    
    1. 验证安装:protoc --version,显示当前版本:libprotoc x.x.x
    2. 安装 Python 的 protobuf 库:pip install protobuf

    三、使用

    3.1 编译 proto 文件

    Protobuf 语义清晰,无需类似 XML 解析器的东西(因为 Protobuf 编译器会将 .proto 文件编译生成对应的数据访问类以对 Protobuf 数据进行序列化、反序列化操作)。

    protoc --python_out=./ ./文件名.proto  
    

    这时会在当前目录生成一个与文件名同名的目录,该目录下会有一个 .py 文件。这个文件会用作模块、解析规则去解析 pb 的源数据。

    3.2 解析 pb 的数据

    from test_pb import Test # 从刚才编译出来的 py 文件中 import 解析的类
    message = Test()
    with open('test.pb', 'rb') as fb:
        pb_content = fb.read() # 如果文件很大,则要分批读取
        # pb_content 是二进制的pb数据,如果是文件,则需要用 open 方法读取数据
        message.ParseFromString(pd_content)
    print message
    

    3.3 写入数据

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    from test_pb import Test # 从刚才编译出来的 py 文件中 import 解析的类
    message = Test()
    message.name = 'hello world' # 赋值
    with open('test.pb', 'wb') as fb:
        # 序列化,写入文件
        fb.write(person.SerializeToString())
    

    3.4 probuf 转 dict

    当 probuf 的数据包含中文时,解析后对于阅读十分不友好。同时如果想要把 probuf 对象转化成 dict 进行后续操作的话。可以试试第三方库:protobuf-to-dict,这个库可以很方便的把 probuf 的数据转化成 dict。示例代码如下:

    from protobuf_to_dict import protobuf_to_dict
    my_message = MyMessage()
    # pb_my_message is a protobuf string
    my_message.ParseFromString(pb_my_message)
    protobuf_to_dict(my_message)
    # 输出:{'message': 'Hello'}
    

    四、错误

    google.protobuf.message.DecodeError: Truncated message.:首先要保证 pb source 为二进制的数据,否则会出现各种非预期错误

    展开全文
  • PB数据窗口XP样式

    2011-10-13 09:07:10
    PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式PB数据窗口XP样式
  • PB数据表结构

    2016-03-03 10:33:40
    PB数据表结构资料,供学习PB者使用草考 _________________ 没分下不了的,可以直接联系我
  • PB数据窗口排序控件

    2017-09-21 17:16:51
    PB数据窗口排序控件,点击数据窗口字段名可以自动升序或降序排序。把这个自定义控件导入到PB里面,然后让数据窗口控件继承于这个控件就可以了
  • PB数据窗口的排序

    2018-10-26 09:59:57
    pb数据窗口的排序 很好用分享给大家 希望对你有用。。。
  • PB数据窗口排序

    2012-04-13 19:51:29
    PB数据窗口排序
  • PB数据窗口导出工具

    2018-06-20 18:29:11
    PB数据窗口导出工具,轻松导出数据窗口,轻松导出数据窗口,
  • PB 数据窗口38个技巧,PB生成二维码,如使DataWindow列只能追加不能修改,在数据窗口中实现动画,如何改变列的字体颜色,提醒用户此列已做修改等
  • pb 数据窗口 导出 pdf

    2015-10-27 15:47:56
    pb 利用 Aladdin Ghostscript 7.04 将数据窗口导出保存为 pdf 格式pb9不支持gs8及以上。代码版本为pb9
  • pb数据窗口导出工具

    2012-05-20 17:57:56
    pb6.5 数据窗口导出 pb9.0 数据窗口导出 pb10.5 数据窗口导出 pbd转换成pbl
  • tensorflow保存数据为.pb格式和加载pb文件

    万次阅读 多人点赞 2018-05-16 21:49:54
    最近接触了tensorflow的object detection API发现里面读取的预先训练模型都是pb格式。谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的序列化...

    最近接触了tensorflow的object detection API发现里面读取的预先训练模型都是pb格式。

    谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它,它允许其他语言和深度学习框架读取、继续训练和迁移 TensorFlow 的模型。

    它的主要使用场景是实现创建模型与使用模型的解耦, 使得前向推导 inference的代码统一。

    另外的好处是保存为 PB 文件时候,模型的变量都会变成固定的,导致模型的大小会大大减小,适合在手机端运行。

    还有一个就是,真正离线测试使用的时候,pb格式的数据能够保证数据不会更新变动,就是不会进行反馈调节啦。

    保存 PB 文件的代码:

    import tensorflow as tf
    import os
    from tensorflow.python.framework import graph_util
    
    pb_file_path = os.getcwd()
    
    with tf.Session(graph=tf.Graph()) as sess:
        x = tf.placeholder(tf.int32, name='x')
        y = tf.placeholder(tf.int32, name='y')
        b = tf.Variable(1, name='b')
        xy = tf.multiply(x, y)
        # 这里的输出需要加上name属性
        op = tf.add(xy, b, name='op_to_store')
    
        sess.run(tf.global_variables_initializer())
    
        # convert_variables_to_constants 需要指定output_node_names,list(),可以多个
        constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store'])
    
        # 测试 OP
        feed_dict = {x: 10, y: 3}
        print(sess.run(op, feed_dict))
    
        # 写入序列化的 PB 文件
        with tf.gfile.FastGFile(pb_file_path+'model.pb', mode='wb') as f:
            f.write(constant_graph.SerializeToString())
    
        # 输出
        # INFO:tensorflow:Froze 1 variables.
        # Converted 1 variables to const ops.
        # 31
    

    加载 PB 模型文件典型代码:

    from tensorflow.python.platform import gfile
    
    sess = tf.Session()
    with gfile.FastGFile(pb_file_path+'model.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='') # 导入计算图
    
    # 需要有一个初始化的过程    
    sess.run(tf.global_variables_initializer())
    
    # 需要先复原变量
    print(sess.run('b:0'))
    # 1
    
    # 输入
    input_x = sess.graph.get_tensor_by_name('x:0')
    input_y = sess.graph.get_tensor_by_name('y:0')
    
    op = sess.graph.get_tensor_by_name('op_to_store:0')
    
    ret = sess.run(op,  feed_dict={input_x: 5, input_y: 5})
    print(ret)
    # 输出 26
    


    保存为 save model 格式也可以生成模型的 PB 文件,并且更加简单。

    保存好以后到saved_model_dir目录下,会有一个saved_model.pb文件以及variables文件夹。顾名思义,variables保存所有变量,saved_model.pb用于保存模型结构等信息。

    import tensorflow as tf
    import os
    from tensorflow.python.framework import graph_util
    
    pb_file_path = os.getcwd()
    
    with tf.Session(graph=tf.Graph()) as sess:
        x = tf.placeholder(tf.int32, name='x')
        y = tf.placeholder(tf.int32, name='y')
        b = tf.Variable(1, name='b')
        xy = tf.multiply(x, y)
        # 这里的输出需要加上name属性
        op = tf.add(xy, b, name='op_to_store')
    
        sess.run(tf.global_variables_initializer())
    
        # convert_variables_to_constants 需要指定output_node_names,list(),可以多个
        constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store'])
    
        # 测试 OP
        feed_dict = {x: 10, y: 3}
        print(sess.run(op, feed_dict))
    
        # 写入序列化的 PB 文件
        with tf.gfile.FastGFile(pb_file_path+'model.pb', mode='wb') as f:
            f.write(constant_graph.SerializeToString())
    
        # INFO:tensorflow:Froze 1 variables.
        # Converted 1 variables to const ops.
        # 31
        
        
        # 官网有误,写成了 saved_model_builder  
        builder = tf.saved_model.builder.SavedModelBuilder(pb_file_path+'savemodel')
        # 构造模型保存的内容,指定要保存的 session,特定的 tag, 
        # 输入输出信息字典,额外的信息
        builder.add_meta_graph_and_variables(sess,
                                           ['cpu_server_1'])
    
    
    # 添加第二个 MetaGraphDef 
    #with tf.Session(graph=tf.Graph()) as sess:
    #  ...
    #  builder.add_meta_graph([tag_constants.SERVING])
    #...
    
    builder.save()  # 保存 PB 模型
    

    这种方法对应的导入模型的方法:

    with tf.Session(graph=tf.Graph()) as sess:
        tf.saved_model.loader.load(sess, ['cpu_1'], pb_file_path+'savemodel')
        sess.run(tf.global_variables_initializer())
    
        input_x = sess.graph.get_tensor_by_name('x:0')
        input_y = sess.graph.get_tensor_by_name('y:0')
    
        op = sess.graph.get_tensor_by_name('op_to_store:0')
    
        ret = sess.run(op,  feed_dict={input_x: 5, input_y: 5})
        print(ret)
    # 只需要指定要恢复模型的 session,模型的 tag,模型的保存路径即可,使用起来更加简单
    

    这样和之前的导入 PB 模型一样,也是要知道tensor的name。那么如何可以在不知道tensor name的情况下使用呢,实现彻底的解耦呢? 给add_meta_graph_and_variables方法传入第三个参数,signature_def_map即可。


    参考:

    https://zhuanlan.zhihu.com/p/32887066



    展开全文
  • PB数据窗口技巧

    2011-10-25 13:39:50
    PB数据窗口技巧,事件如何让存储文件目录的列,显示图片?
  • PB数据窗口存储为PDF

    2011-07-04 17:24:37
    PB数据窗口存储为PDF PB数据窗口存储为PDF PB数据窗口存储为PDF
  • 自定义pb数据窗口线条颜色

    热门讨论 2015-07-24 10:36:07
    pb9源码,自定义pb数据窗口线条颜色,包括grid样式数据窗口,绘制边框等,另还提供了一个提取机器码的函数
  • pb数据窗口技巧38个

    2011-12-15 11:29:27
    pb数据窗口技巧38个 pb数据窗口技巧38个
  • PB数据窗口鼠标移动字体变色, datawindow数据行鼠标移动会变色,这个简单的例子,可以看到如何实现的。
  • 60个pb数据窗口技巧

    2014-08-21 09:04:23
    60个pb数据窗口技巧
  • PB数据连接方法

    热门讨论 2016-02-24 08:16:07
    PB数据连接方法     PB,全程PowerBuilding, 首先是在 数据库系统原理中接触到,这次是考试毕业论文将 用pb语言,下面是PB系统数据库连接过程:  目录 一,数据库还原: 二,ODBC数据源链接: 三,PB 系统中数据库的...

     

                                        PB数据连接方法

     


        PB,全程PowerBuilding, 首先是在 数据库系统原理中接触到,这次是考试毕业论文将


    pb语言,下面是PB系统数据库连接过程:


      

    目录

    一,数据库还原:


    二,ODBC数据源链接:


    三,PB 系统中数据库的建立:

     

     

    一,数据库还原:


    首先将系统还原到SQL server 中,


        1,先在SQL中建立一和数据库同名的文件:


     



         2,打开数据库代码进行执行:


     




          3,双击".sql " 还原到sql server 中:


     




           4,成功如下:






    二,ODBC数据源链接:

     

    1,PB界面中数据库连接如下:


     




    2,进入下面添加:


     


     

     

     

     

     

     

     

     

     









    三,PB 系统中数据库的建立:


     

      

     

     

     

     

     

       复制显出的数据库连接的代码,到PB系统中


     

     

        将刚刚复制的,复制到PB系统中,操作如下:


     

     


           最后恭喜你,运行成功!

     

     

     

     

     

     

     

     

    展开全文
  • PB 数据窗口打印详细控制代码
  • 这是数据窗的一些使用方法,一共60个,希望大家喜欢
  • pb 数据窗口导出EXCEL

    2012-11-07 16:41:58
    pb 数据窗口导出EXCEL PB EXCEL 导出
  • PB数据管道

    千次阅读 2014-07-29 14:09:29
    数据管道提供了一种不同数据库之间传递数据和(或)表结构的方法。 数据管道对象 要完成数据管道的功能需要提供如下内容: 需要数据源和目标数据库,并能够和这两个数据库正常联接 需要源数据库中的哪些表; ...

    数据管道提供了一种不同数据库之间传递数据和(或)表结构的方法。


    数据管道对象
    要完成数据管道的功能需要提供如下内容:
    需要数据源和目标数据库,并能够和这两个数据库正常联接
    需要源数据库中的哪些表;
    需要复制到目标数据库中的什么位置;
    要完成哪些管道操作;
    发生错误的频率;
    允许发生错误的最大数;
    需要包括的扩充特性。


    数据管道画板
    New —> DataBase —> Data Pipeline
    数据管道选项:
    Table:目标表名
    Key:目标表的主键名(非主键字段名)
    Options:管道选项
    Create:添加表、Replace:替换已存在的表、Refresh:删除或者插入行、Append:插入行、Update:更新或者插入行
    Max Errors:允许的最大错误数
    Commit:被提交的事务处理内的行数
    Extended Attributes:扩充特性是否管道化

    Design->Database Bolb 处理Blob类型的字段

    如果在目标数据库中只创建数据表而不拷贝原来的数据,可以通过定义永远不成立的检索条件来实现,比如2<1作为检索条件。


    数据管道用户对象
    New —> PB Object —> Standard Class —> OK —> 选中pipeline —> OK


    属性:
    DataObject:指定使用哪个数据管道
    该属性是数据管道最重要的一个属性,有些类似于数据窗口控件的DataObject属性。此属性只能在运行时设定,虽然在用户对象画板中也提供了设置该属性的地方,但这好像不起作用。下面是一个为管道用户对象设定DataObject的例子:
    iuo_pipeline.DataObject="p_copy_employee"
    数据窗口控件的DataObject属性如果在脚本运行时动态修改,则形成发行文件时,在执行文件中不能包括相应的数据窗口对象。与此类似,数据管道对象也不能包括在执行文件中,并且也不能包括在资源文件pbr中,只能放置到pbd或者dll文件中。

    RowsInError:错误记录数
    Long类型,表示管道运行时已经发生的错误数。该值肯定不会大于管道画板中定义的MaxErrors的取值。

    RowsRead:已经读取的记录数
    Long类型,表示管道运行时已经读取的数据记录数。该值肯定不会大于管道画板中Commit中定义的取值。

    RowsWritten:已经成功写入的记录数
    Long类型,表示已经写入到数据库中的数据记录数

    Syntax:管道对象的语法
    该属性也是一个非常重要的属性,它体现了管道的全部定义,在某种程度上可以把它用做一个管道。利用该属性可以构造出通用性很强的数据管道,因为可以使用Mid,Pos,Len,Left和Right等字符串处理函数修改数据管道Syntax的语法,以适应程序运行时的情况。
    可以选择管道用户对象 —> 右键:Edit Source查看语法


    事件:
    除了两个标准事件constructor和Destructor之外,还有三个数据管道用户对象所特有的事件,它们是PipeStart,PipeMeter和PipeEnd。这三个事件分别在管道执行时、执行期间和执行结束后触发。通常使用这三个事件和管道的某些属性来反映执行进度。

    PipeStart事件在调用管道函数Start()或者Repair()之后触发。PipeMeter事件在提交某个事务处理之后触发,这通常是在处理的记录数达到Commit值规定的数时,PipeEnd事件在函数Start或者Repair的执行过程终止时触发。


    函数:
    Start:
    pipelineobject.Start(sourcetrans,destinationtrans,errordatawindow{,arg1,arg2,...,argn } )
    其中,pipelineobject为管道用户对象类型变量,在执行该函数之前它的DataObject属性有明确的取值;sourcetrans为联接源库的事务对象,destinationtrans是用来联接目标库的事务对象,这两个事务对象在此之前都应该和相应的库正确建立了联接;当管道执行时如果发生错误,它的错误信息显示在errordatawindow数据窗口控件中。没有必要为该控件指明数据窗口对象,即使指明在显示错误信息时该数据窗口对象也被替换。前面这三个变量是必须要指明的,否则该函数无法正常工作。后面的变量根据数据管道是否定义了检索变量而定。如果数据管道定义了检索变量,arg1,arg2,...,argn要指定,并且变量的个数和检索变量的个数相同,并且对应的类型相同。如果管道对象定义了检索变量,而在Start函数中没有提供相应的值,在管道运行时系统会弹出对话框,要求用户输入检索变量。函数执行时的返回值情况比较复杂,如下所示:
    返回值 含义
    1 函数执行成功
    -1 管道打开失败
    -2 列太多
    -3 目标表已经存在
    -4 目标表不存在
    -5 联结错误
    -6 检索变量错误
    -7 列不匹配
    -8 源中有致命的SQL错误
    -9 目标中有致命的SQL错误
    -10 超出了最大的错误数
    -12 表语法错误
    -13 没有提供必须的主键
    -15 管道操作已经进行
    -16 源数据库中有错误
    -17 目标数据库中有错误
    -18 目标数据库是只读的


    Repair:
    在脚本中运行管道,发生错误后必须进行一定的处理。Repair函数就是在管道执行发生错误后应该执行的。
    错误发生后,错误信息及错误数据显示在Start函数errordatawindow变量指定的数据窗口控件中。用户在修改错误后可以再次提交数据,这时调用Repair函数。这相当于在数据管道画板中发生错误后使用Painter Bar中的小图标按钮Update DB,或者使用菜单项Design->Update Database。

    pipelineobject.Repair ( destinationtrans )
    其中,pipelineobject是管道用户对象类型变量,在执行该函数之前它的DataObject属性有明确的取值;destinationtrans是和目标库建立联接的事务对象。函数的返回值也比较复杂,如下所示:
    返回值 含义
    1 函数执行成功
    -5 联结错误
    -9 目标中有致命的SQL错误
    -10 超出了最大的错误数
    -11 无效的窗口句柄
    -12 表语法错误
    -15 管道操作已经进行
    -17 目标数据库中有错误
    -18 目标数据库是只读的


    Cancel:
    该函数可以终止正在执行的管道,在用户要强制退出某数据管道时可以调用该函数。

    pipelineobject.Cancel()
    函数正确执行返回1,否则返回-1。


    运行数据管道

    在数据画板中直接运行
    使用菜单项Design -> Execute或者PainterBar中的Execute小图标按钮来执行当前的数据管道。管道运行过程中,如果出现错误信息,应该根据错误信息修改管道的定义,然后重新运行。
    如果为提取源表数据指定了检索变量,则在执行时要求用户输入取值,然后使用该值检索源数据窗口中符合该条件的数据。如果没有定义检索参数,则直接从源表中读取数据。

    在程序中执行管道
    需如下步骤:
    创建相关对象
    和源目标数据库建立联接
    创建数据管道,并设置其相关属性
    执行管道,并处理各种异常。

    在脚本中使用数据管道,需要创建三个对象:数据管道对象、数据管道用户对象以及一个保存错误信息的数据窗口对象,其中数据窗口对象是在管道运行错误时由系统自动创建的,数据管道对象在数据管道画板中创建,数据管道用户对象在Standard Class用户对象中创建。

     

    展开全文
  • PB数据窗口中行列颜色设置 ,如何动态改变数据窗口中列的颜色的表达式
  • pb数据窗口edit sourse说明
  • 利用PB数据管道实现数据库之间数据同步,使数据库之间同步

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,835
精华内容 49,934
关键字:

pb的数据格式、