当前位置: 首页 > news >正文

SAP ABAP 程序中归档数据读取方式

上一篇文章记录了字段目录,归档信息结构,这篇文章记录如何通过字段目录,归档信息结构,归档对象读取归档数据。未归档数据是从数据库表直接抽取,本样例是通过归档读取方式复写sql。

发布时间:2025.05.16

示例中用两种方式实现归档数据的读取,两种方式都利用了索引读取:

  1. 用标准函数读取各个表的完整数据,下例中读取MSEG用了此种方法,这种方式可以读取归档对象中任何表的全部数据,劣势是随着读取数据量增大,耗时长。

  2. 如果索引表中有我们需要读取的全部数据,可以直接读取索引表即可,无需进一步读取表的所有数据,这样比较高效。下例中读取EKPO用了此种方法。

总结:如果需要读取的字段多,则用标准函数读取表的全部字段;如果需要读取字段少,则直接读取索引表,在建信息结构时,需要包含这些字段。

完整代码如下

REPORT zmm_rpt_538_wu5.
TABLES:mseg.
TABLES:admi_files.
TYPES: ty_t_file_and_offset TYPE STANDARD TABLE OF aind_arkey,BEGIN OF ty_file,archivekey TYPE arkey,END OF ty_file,ty_t_file TYPE STANDARD TABLE OF ty_file.DATA: gv_current_view             TYPE tabname,   " display the result . no need in the real programgt_files_and_offset_from_as TYPE aind_t_arkey.  "mandatorySELECTION-SCREEN BEGIN OF BLOCK zb WITH FRAME TITLE t1.SELECT-OPTIONS : s_werks FOR mseg-werks OBLIGATORY. "工厂SELECT-OPTIONS : s_mblnr FOR mseg-mblnr . "物料凭证SELECT-OPTIONS : s_lifnr FOR mseg-lifnr . "供应商SELECT-OPTIONS : s_matnr FOR mseg-matnr . "物料编号
SELECTION-SCREEN END OF BLOCK zb.PARAMETERS:p_readdb TYPE boole_d DEFAULT 'X' NO-DISPLAY,p_readar TYPE boole_d             NO-DISPLAY,p_readas TYPE boole_d DEFAULT 'X' NO-DISPLAY.
SELECT-OPTIONS s_files FOR admi_files-archiv_key NO-DISPLAY.START-OF-SELECTION.
*数据库数据获取SELECT m~werks,m~mblnr,m~mjahr,m~zeile,m~lifnr,m~matnr,m~menge,m~meinsFROM mseg AS mINNER JOIN ekpo AS e ON m~ebeln = e~ebeln AND m~ebelp = e~ebelpWHERE m~werks IN @s_werksAND m~matnr IN @s_matnrAND m~mblnr IN @s_mblnrAND m~lifnr IN @s_lifnrAND e~pstyp = '3'AND e~matnr IS NOT INITIALINTO TABLE @DATA(gt_data).
*归档数据获取PERFORM frm_integrate_data.
*&---------------------------------------------------------------------*
*& Form frm_integrate_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_integrate_data .DATA:lt_selections TYPE rsds_frange_t.DATA:lt_selections1 TYPE rsds_frange_t.DATA:lt_ekpo TYPE STANDARD TABLE OF ekpo.DATA:lt_mseg TYPE STANDARD TABLE OF mseg.DATA:lr_ebeln TYPE RANGE OF ebeln.DATA:lr_ebelp TYPE RANGE OF ebelp.DATA:lv_table TYPE tabname.*因为MSEG与EKPO关联,可直接过滤EBELN为空的数据APPEND VALUE #( sign = 'I' option = 'NE' low = '' ) TO lr_ebeln.
*筛选条件整合PERFORM frm_selection_build USING s_werks[]s_matnr[]s_mblnr[]s_lifnr[]lr_ebeln[]CHANGING lt_selections.
*读取归档数据PERFORM data_read_from_archive USING lt_selections    " custom selectionss_files[]        " 归档文件路径,不赋值不影响数据读取,赋值可以读取指定归档文件'X''MSEG'           " table name'Z_MM_MATBEL04'  " 字段目录'MM_MATBEL'      " 归档对象CHANGING lt_mseg.   "表类型必须与抽取表明一致SORT lt_mseg BY mblnr zeile mjahr.*整理已归档EBELN,EBELP用于查询EKPOCLEAR:lr_ebeln,lr_ebelp.LOOP AT lt_mseg ASSIGNING FIELD-SYMBOL(<lfs_mseg>).APPEND VALUE #( sign = 'I' option = 'EQ' low = <lfs_mseg>-ebeln ) TO lr_ebeln.APPEND VALUE #( sign = 'I' option = 'EQ' low = <lfs_mseg>-ebelp ) TO lr_ebelp.ENDLOOP.IF lr_ebeln IS NOT INITIAL.SORT lr_ebeln BY sign option low. DELETE ADJACENT DUPLICATES FROM lr_ebeln COMPARING ALL FIELDS.SORT lr_ebelp BY sign option low. DELETE ADJACENT DUPLICATES FROM lr_ebelp COMPARING ALL FIELDS.*因为需要获取的字段在归档信息结构Z_DRB_EKKO_001对应的索引表中全部存在,所以只需要读取索引表的内容即可
*获取归档信息结构Z_DRB_EKKO_001对应的索引表名SELECT SINGLE gentab INTO @lv_table FROM aind_str2 WHERE archindex = 'Z_DRB_EKKO_001' AND active = 'X'.*从索引表中抽取字段SELECT a~ebeln,a~ebelpFROM (lv_table) AS aWHERE ebeln IN @lr_ebelnAND ebelp IN @lr_ebelpAND pstyp = '3'AND matnr IS NOT INITIALINTO CORRESPONDING FIELDS OF TABLE @lt_ekpo.SORT lt_ekpo BY ebeln ebelp.DELETE ADJACENT DUPLICATES FROM lt_ekpo COMPARING ebeln ebelp.ENDIF.*整理归档数据整合至结果表中LOOP AT lt_mseg ASSIGNING <lfs_mseg>.READ TABLE lt_ekpo TRANSPORTING NO FIELDS WITH KEY ebeln = <lfs_mseg>-ebeln ebelp = <lfs_mseg>-ebelp BINARY SEARCH.IF sy-subrc = 0.APPEND INITIAL LINE TO gt_data ASSIGNING FIELD-SYMBOL(<lfs_data>).MOVE-CORRESPONDING <lfs_mseg> TO <lfs_data>.ENDIF.ENDLOOP.
*去重SORT gt_data BY mblnr mjahr zeile.DELETE ADJACENT DUPLICATES FROM gt_data COMPARING mblnr mjahr zeile.
ENDFORM.
*&---------------------------------------------------------------------*
*& frm_selection_build1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_selection_build USING VALUE(fs_werks) TYPE tableVALUE(fs_matnr) TYPE tableVALUE(fs_mblnr) TYPE tableVALUE(fs_lifnr) TYPE tableVALUE(fs_ebeln) TYPE tableCHANGING ft_selections   TYPE rsds_frange_t.FIELD-SYMBOLS: <fw_selections> LIKE LINE OF ft_selections,<lw_selopt>     TYPE rsdsselopt,<lw_any>        TYPE any.REFRESH: ft_selections.* build table with the name of all selection options and their valuesAPPEND INITIAL LINE TO ft_selections ASSIGNING <fw_selections>.<fw_selections>-fieldname  = 'WERKS'.LOOP AT fs_werks ASSIGNING <lw_any>.APPEND INITIAL LINE TO <fw_selections>-selopt_tASSIGNING <lw_selopt>.MOVE-CORRESPONDING <lw_any> TO <lw_selopt>.ENDLOOP.APPEND INITIAL LINE TO ft_selections ASSIGNING <fw_selections>.<fw_selections>-fieldname  = 'MATNR'.LOOP AT fs_matnr ASSIGNING <lw_any>.APPEND INITIAL LINE TO <fw_selections>-selopt_tASSIGNING <lw_selopt>.MOVE-CORRESPONDING <lw_any> TO <lw_selopt>.ENDLOOP.APPEND INITIAL LINE TO ft_selections ASSIGNING <fw_selections>.<fw_selections>-fieldname  = 'MBLNR'.LOOP AT fs_mblnr ASSIGNING <lw_any>.APPEND INITIAL LINE TO <fw_selections>-selopt_tASSIGNING <lw_selopt>.MOVE-CORRESPONDING <lw_any> TO <lw_selopt>.ENDLOOP.APPEND INITIAL LINE TO ft_selections ASSIGNING <fw_selections>.<fw_selections>-fieldname  = 'LIFNR'.LOOP AT fs_lifnr ASSIGNING <lw_any>.APPEND INITIAL LINE TO <fw_selections>-selopt_tASSIGNING <lw_selopt>.MOVE-CORRESPONDING <lw_any> TO <lw_selopt>.ENDLOOP.APPEND INITIAL LINE TO ft_selections ASSIGNING <fw_selections>.<fw_selections>-fieldname  = 'EBELN'.LOOP AT fs_ebeln ASSIGNING <lw_any>.APPEND INITIAL LINE TO <fw_selections>-selopt_tASSIGNING <lw_selopt>.MOVE-CORRESPONDING <lw_any> TO <lw_selopt>.ENDLOOP.ENDFORM.*----------------------------------------------------------------------*
*   Read requested flight bookings from the archive.
*----------------------------------------------------------------------*
* --> FS_*                 Selection criteria
* <-- FT_TABLE             records from the archive and the database
* Global
*  <-- GT_FILES_AND_OFFSET_FROM_AS Will be needed for the access to invoices or tickets
*----------------------------------------------------------------------*
FORM data_read_from_archive USING VALUE(lt_selections)   TYPE rsds_frange_tVALUE(fs_files)    TYPE tableVALUE(fp_readas)   TYPE boole_dVALUE(fv_tabname)  TYPE tabnameVALUE(fs_fieldcat) TYPE aind_fcatVALUE(fs_archobj) TYPE objct_tr01CHANGING ft_table           TYPE table.DATA: lt_obj_data                 TYPE as_t_tablebuffer,lt_files_read_by_object     TYPE STANDARD TABLE OF aind_arkey,lt_files_and_offset_from_as TYPE aind_t_arkey.DATA: lr_files_read_sequential    TYPE as_t_rng_archiv.DATA: lv_archive_name TYPE arkey,lv_obj_offset   TYPE admi_offst,lv_handle       LIKE sy-tabix.FIELD-SYMBOLS: <lw_file_ofs>      TYPE aind_arkey.* prepare for reading from archivePERFORM archive_read_prepare USING fs_filesfp_readaslt_selectionsfs_fieldcatCHANGING lt_files_read_by_object[]lr_files_read_sequential[]lt_files_and_offset_from_as[].SORT lt_files_and_offset_from_as BY archivekey archiveofs.gt_files_and_offset_from_as[] = lt_files_and_offset_from_as[].* read sequentialIF fp_readas IS INITIAL OR lr_files_read_sequential[] IS NOT INITIAL.CALL FUNCTION 'ARCHIVE_OPEN_FOR_READ'EXPORTINGobject             = fs_archobjIMPORTINGarchive_handle     = lv_handleTABLESarchive_files      = lr_files_read_sequential[]EXCEPTIONSno_files_available = 1.IF sy-subrc IS INITIAL.DO.CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT'EXPORTINGarchive_handle = lv_handleIMPORTINGobject_offset  = lv_obj_offsetarchive_name   = lv_archive_nameEXCEPTIONSend_of_file    = 1.IF NOT sy-subrc IS INITIAL.EXIT.ENDIF.IF NOT lt_files_and_offset_from_as[] IS INITIAL.
*         as AS was used, check if data object can include searched dataREAD TABLE lt_files_and_offset_from_as TRANSPORTING NO FIELDSWITH KEY archivekey = lv_archive_namearchiveofs = lv_obj_offsetBINARY SEARCH.CHECK sy-subrc IS INITIAL.ENDIF.*       read data object with I_SELECTIONSREFRESH lt_obj_data.CALL FUNCTION 'ARCHIVE_READ_OBJECT_BY_HANDLE'EXPORTINGiv_handle          = lv_handleiv_read_class_data = 'YES'  "we don t want to read archvie clas data."If you want, do provide 'YES' or 'CONTEXT'CHANGINGct_obj_data        = lt_obj_data.PERFORM data_object_read USING lt_selections[]fv_tabnameCHANGING lt_obj_dataft_table[].ENDDO.CALL FUNCTION 'ARCHIVE_CLOSE_FILE'EXPORTINGarchive_handle = lv_handle.ELSE.MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDIF.* read only the relevant data objectsSORT lt_files_read_by_object  BY archivekey archiveofs.LOOP AT lt_files_read_by_object ASSIGNING <lw_file_ofs>.
*   provide empty lt_obj_data only if you want to read all tables from current data object!
*   In this example we do have only one table (SFLIGHT), therefore we provide empty lt_obj_data.
*   See parameter documentation in the function module interface!REFRESH lt_obj_data.CALL FUNCTION 'ARCHIVE_READ_OBJECT_BY_OFFSET'EXPORTINGiv_archivekey      = <lw_file_ofs>-archivekeyiv_offset          = <lw_file_ofs>-archiveofsiv_read_class_data = 'YES'  "we don t want to read archvie clas data."If you want, do provide 'YES' or 'CONTEXT'CHANGINGct_obj_data        = lt_obj_data[].*   read data objectPERFORM data_object_read USING lt_selections[]fv_tabnameCHANGING lt_obj_dataft_table[].ENDLOOP.ENDFORM.                    " data_read_from_archive
*----------------------------------------------------------------------*
*  Preparation for reading from the archive:
*  If the reading is to take place using the AS:
*  a) Certain archive files with requested data with the help of
*     function module AS_API_READ
*  b) Depending on how many data objects of an archive file are to be
*     read, decide whether it would be faster to read this file
*     sequentially or using an index.
*  Otherwise create a table with single values from the range of the
*  archive files.
*----------------------------------------------------------------------*
* --> FS_FILES                      Archive files for sequential read
*                                   accesses
* --> FT_SELECTIONS                 Selections
* <-- FT_FILES_READ_BY_OBJECT       Files+Offset for index-based read
*                                   accesses
* <-- FR_FILES_READ_READ_SEQUENTIAL Result: Files for sequential read
*                                           accesses
* <-- FT_FILES_AND_OFFSET_AS        Result: If the reading is to take
*                                   place sequentially and the files to
*                                   be read were delivered previously
*                                   by AS, you will see here later which
*                                   data objects are to be considered
*                                   during the sequential read (for
*                                   optimization purposes)
*----------------------------------------------------------------------*
FORM archive_read_prepareUSING VALUE(fs_files)          TYPE tableVALUE(fp_readas)         TYPE boole_dVALUE(ft_selections)     TYPE rsds_frange_tVALUE(fs_fieldcat)     TYPE aind_fcatCHANGING ft_files_read_by_object  TYPE ty_t_file_and_offsetfr_files_read_sequential TYPE tableft_files_and_offset_as   TYPE ty_t_file_and_offset.DATA: lt_files_read_sequential TYPE ty_t_file.FIELD-SYMBOLS: <lr_file> TYPE rng_archiv,<lv_file> LIKE LINE OF lt_files_read_sequential.REFRESH: ft_files_read_by_object, fr_files_read_sequential,ft_files_and_offset_as.IF fp_readas IS NOT INITIAL.
*   get data objects with requested dataCALL FUNCTION 'AS_API_READ'         "1)EXPORTINGi_fieldcat         = fs_fieldcati_selections       = ft_selections[]IMPORTINGe_result           = ft_files_and_offset_as[]EXCEPTIONSno_infostruc_found = 2.IF sy-subrc = 2.MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.EXIT.ENDIF.*   decide about faster access kind: read sequential or
*   only relevant data objects?CHECK ft_files_and_offset_as[] IS NOT INITIAL.SORT ft_files_and_offset_as BY archivekey archiveofs.DELETE ADJACENT DUPLICATES FROM ft_files_and_offset_asCOMPARING ALL FIELDS.CALL FUNCTION 'ARCHIVE_FILES_ACCESS_KIND_GET'TABLESit_files_and_pos  = ft_files_and_offset_aset_files_seq_read = lt_files_read_sequentialet_files_obj_read = ft_files_read_by_object.*   convert table with archive files to a rangeLOOP AT lt_files_read_sequential ASSIGNING <lv_file>.APPEND INITIAL LINE TO fr_files_read_sequentialASSIGNING <lr_file>.<lr_file>-sign   = 'I'.<lr_file>-option = 'EQ'.<lr_file>-low    = <lv_file>.ENDLOOP.ELSEIF fs_files[] IS NOT INITIAL.fr_files_read_sequential[] = fs_files[].ENDIF.ENDFORM.                    " archive_read_prepare*----------------------------------------------------------------------*
* Read data of the current data object:
* The check against the user#s selections is necessary if the
* possibility exists that a data object contains data that was not
* selected, or if not all fields for which the user made a selection are
* contained in the used infostructure.
*----------------------------------------------------------------------*
*  -->  FT_SELECTIONS          User#s selection.
*  <--> FT_OBJ_DATA            Pointer to the data of the current data object
*  <--  FT_TABLE       Result: records from the archive
*----------------------------------------------------------------------*
FORM data_object_read USING VALUE(ft_selections) TYPE rsds_frange_tVALUE(fv_tabname)    TYPE tabnameCHANGING ft_obj_data          TYPE as_t_tablebufferft_table             TYPE table.DATA: lv_indx  LIKE sy-tabix.FIELD-SYMBOLS: <lw_table>       TYPE any,<lw_selections>  LIKE LINE OF ft_selections,<lw_obj_data>    LIKE LINE OF ft_obj_data,<lt_table>       TYPE STANDARD TABLE,<lv_field_value> TYPE any.READ TABLE ft_obj_data ASSIGNING <lw_obj_data> WITH KEY tabname = fv_tabname.CHECK sy-subrc IS INITIAL.ASSIGN <lw_obj_data>-tabref->* TO <lt_table>.LOOP AT <lt_table> ASSIGNING <lw_table>.lv_indx = sy-tabix.LOOP AT ft_selections ASSIGNING <lw_selections>.ASSIGN COMPONENT <lw_selections>-fieldnameOF STRUCTURE <lw_table> TO <lv_field_value>.CHECK sy-subrc IS INITIAL.IF NOT <lv_field_value> IN <lw_selections>-selopt_t.DELETE <lt_table> INDEX lv_indx.EXIT.ENDIF.ENDLOOP.ENDLOOP.APPEND LINES OF <lt_table> TO ft_table.ENDFORM.                    " data_object_read

相关文章:

SAP ABAP 程序中归档数据读取方式

上一篇文章记录了字段目录&#xff0c;归档信息结构&#xff0c;这篇文章记录如何通过字段目录&#xff0c;归档信息结构&#xff0c;归档对象读取归档数据。未归档数据是从数据库表直接抽取&#xff0c;本样例是通过归档读取方式复写sql。 发布时间&#xff1a;2025.05.16 示…...

每周资讯 | 腾讯Q1财报:国内游戏业务收入同比增长24%;Tripledot 8亿美元收购AppLovin游戏业务

内容速览&#xff1a; 广州“服务贸易和数字贸易22条”助推游戏产业发展Tripledot Studios 8亿美元收购AppLovin游戏业务苹果紧急申请暂停执行AppStore新规4月中国手游出海收入下载榜&#xff0c;点点互动《Kingshot》收入激增 腾讯Q1财报&#xff1a;国内游戏业务收入同比增长…...

iOS SwiftUI的具体运用实例(SwiftUI库的运用)

最近接触到一个 SwiftUI的第三方框架&#xff0c;它非常的好用。以下是 具体运用实例&#xff0c;结合其核心功能与开发场景&#xff0c;分多个维度进行详细解析&#xff1a; 一、基础 UI 组件开发 登录界面 SwiftUI 的 VStack、TextField 和 Button 可快速构建用户登录表单。例…...

杰理ac696配置sd卡随机播放

#define FCYCLE_LIST 0 // 列表循环&#xff08;按顺序播放文件列表&#xff09; #define FCYCLE_ALL 1 // 全部循环&#xff08;播放完所有文件后重新开始&#xff09; #define FCYCLE_ONE 2 // 单曲循环&#xff08;重复播放当前文件&#xff09; #define …...

MCP协议的核心机制和交互过程

MCP的核心是JSON-RPC 2.0 MCP使用了 JSON-RPC 2.0 作为client和server端的消息传输。JSON-RPC 2.0是一个用JSON编码的轻量级远程过程调用协议。它的优越性如下: 易读,易调试与编程语言无关,环境无关技术成熟,规范清晰且应用广泛JSON-NPC 2.0定义了request、response、noti…...

论信息系统项目的范围管理

论信息系统项目的范围管理 前言一、规划范围管理&#xff0c;收集需求二、定义范围三、创建工作分解结构四、确认范围五、控制范围 前言 为了应对烟草零售客户数量大幅度增长所带来的问题&#xff0c;切实履行控烟履约的相关要求&#xff0c;同时也为了响应国务院“放管服”政策…...

米勒电容补偿的理解

米勒电容补偿是使运放放大器稳定的重要手法&#xff0c;可以使两级运放的两个极点分离&#xff0c;从而可以得到更好的相位裕度。 Miller 电容补偿的本质是增加一条通路流电流&#xff0c;流电流才是miller效应的本质。给定一个相同的输入&#xff0c;Miller 电容吃掉的电流比…...

力扣654题:最大二叉树(递归)

小学生一枚&#xff0c;自学信奥中&#xff0c;没参加培训机构&#xff0c;所以命名不规范、代码不优美是在所难免的&#xff0c;欢迎指正。 标签&#xff1a; 二叉树、递归 语言&#xff1a; C 题目&#xff1a; 给定一个不重复的整数数组 nums 。最大二叉树可以用下面的算…...

Go语言实现生产者-消费者问题的多种方法

Go语言实现生产者-消费者问题的多种方法 生产者-消费者问题是并发编程中的经典问题&#xff0c;涉及多个生产者生成数据&#xff0c;多个消费者消费数据&#xff0c;二者通过缓冲区&#xff08;队列&#xff09;进行协调&#xff0c;保证数据的正确传递和同步。本文将从简单到…...

深度学习驱动下的目标检测技术:原理、算法与应用创新(二)

三、主流深度学习目标检测算法剖析 3.1 R - CNN 系列算法 3.1.1 R - CNN 算法详解 R - CNN&#xff08;Region - based Convolutional Neural Networks&#xff09;是将卷积神经网络&#xff08;CNN&#xff09;应用于目标检测领域的开创性算法&#xff0c;其在目标检测发展历…...

提权脚本Powerup命令备忘单

1. 获取与加载 从 GitHub 下载&#xff1a;(New-Object Net.WebClient).DownloadFile("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1", "C:\Temp\PowerUp.ps1")本地加载&#xff1a;Import-Module .\Power…...

人工智能 (AI) 在无线接入网络 (RAN) 中的变革性作用

随着电信行业向更智能、更高效的系统迈进&#xff0c;将 AI 集成到 RAN 中已不再是可有可无&#xff0c;而是至关重要。 随着 6G 时代的到来&#xff0c;人工智能 (AI) 有望降低运营成本&#xff0c;并带来更大的盈利机会。AI-RAN 正处于这一变革的前沿&#xff0c;在 RAN 环境…...

从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区

目录 前言 一、从硬件角度理解"Linux下一切皆文件" 从理解硬件是种“文件”到其他系统资源的抽象 二、缓冲区 1.缓冲区介绍 2.缓冲区的刷新策略 3.用户级缓冲区 这个用户级缓冲区在哪呢&#xff1f; 解释关于fork再加重定向“>”后数据会打印两份的原因 4.内核缓冲…...

Python-感知机以及实现感知机

感知机定义 如果有一个算法&#xff0c;具有1个或者多个入参&#xff0c;但是返回值要么是0&#xff0c;要么是1&#xff0c;那么这个算法就叫做感知机&#xff0c;也就是说&#xff0c;感知机是个算法 感知机有什么用 感知机是用来表示可能性的大小的&#xff0c;我们可以认…...

根据台账批量制作个人表

1. 前期材料准备 1&#xff09;要有 人员总的信息台账 2&#xff09;要有 个人明白卡模板 2. 开始操作 1&#xff09;打开 人员总的信息台账&#xff0c;选择所需要的数据模块&#xff1b; 2&#xff09;点击插入&#xff0c;选择数据透视表&#xff0c;按流程操作&…...

ohttps开启群晖ssl证书自动更新

开启群晖ssl证书自动更新OHTTPS ohttps是一个免费自动签发ssl证书、管理、部署的项目。 https://ohttps.com 本文举例以ohttps项目自动部署、更新群晖的ssl证书。 部署 签发证书 打开ohttps-证书管理-创建证书-按你实际情况创建证书。创建部署节点 打开Ohttps-部署节点-添加…...

【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况

好的&#xff01;为了更清楚地说明flattened类型在查询嵌套数组时可能返回不准确结果的情况&#xff0c;我们可以通过一个具体的例子来展示。这个例子将展示如何在文档中没有完全匹配的嵌套对象时&#xff0c;flattened类型仍然可能返回该文档。 示例文档结构 假设你有以下文…...

【知识点】语义分割任务中有哪些损失函数?

在语义分割任务中,模型需要对图像中的每个像素进行分类。因此,损失函数的设计不仅要关注整体精度,还需要特别注意目标物体的边界区域。以下是一些常用的损失函数及其适用场景,包括数学公式、PyTorch 实现和是否适合处理边界问题。 📌 一、交叉熵损失 Cross-Entropy Loss …...

Node.js 同步加载问题详解:原理、危害与优化策略

文章目录 一、什么是同步加载&#xff1f;二、同步加载的危害场景三、检测同步加载问题四、解决方案与代码优化 一、什么是同步加载&#xff1f; 1.核心概念 在 Node.js 的 CommonJS 模块系统中&#xff0c;require() 是同步操作&#xff1a; // 模块加载会阻塞后续代码执行 …...

linux下tcp/ip网络通信笔记1,

本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1&#xff0c;网络发展&#xff0c;网络协议&#xff0c;意识到网络通信——不同主机的进程间通信&#xff0c; 2&#xff0c;学习如何在应用层调用系统提供的接口进行通信&#xff0c;echo_Udp…...

网络攻防模拟:城市安全 “数字预演”

在当今数字化快速发展的时代&#xff0c;网络安全和城市安全面临着前所未有的挑战。为有效应对这些挑战&#xff0c;利用先进的技术搭建模拟演练平台至关重要。图扑软件的 HT for Web 技术&#xff0c;为网络攻防模拟与城市安全演练提供了全面且高效的解决方案。 三维场景搭建&…...

在 Ubuntu 20.04 中使用 init.d 或者systemd实现开机自动执行脚本

Ubuntu 20 默认使用的是 systemd 系统管理器&#xff0c;但传统的 SysV Init&#xff08;/etc/init.d/&#xff09;脚本依然兼容并可用。本文将介绍如何通过 init.d 写脚本来在开机时自动设置某个 GPIO&#xff08;如 GPIO407&#xff09;为高电平&#xff0c;适用于嵌入式系统…...

2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 解题报告 | 珂学家

前言 题解 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)。 国赛比省赛难一些&#xff0c;做得汗流浃背&#xff0c;T_T. RC-u1 大家一起查作弊 分值: 15分 这题真的太有意思&#xff0c;看看描述 在今年的睿抗比赛上&#xff0c;有同学的提交代码如下&#xff1…...

【生成式AI文本生成实战】从GPT原理到企业级应用开发

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

【目标检测】RT-DETR

DETRs Beat YOLOs on Real-time Object Detection DETR在实时目标检测任务中超越YOLO CVPR 2024 代码地址 论文地址 0.论文摘要 YOLO系列因其在速度与精度间的均衡权衡&#xff0c;已成为实时目标检测领域最受欢迎的框架。然而我们观察到&#xff0c;非极大值抑制&#xf…...

数据库行业竞争加剧,MySQL 9.3.0 企业版开始支持个人下载

最新发现&#xff0c;Oracle 官方网站放开了 MySQL 9.3.0 企业版下载链接&#xff0c;个人用户也可以免费下载&#xff0c;不过只能用于学习、开发或者原型测试&#xff0c;不能用于生产环境。 通常我们都是下载 MySQL 社区版&#xff0c;不过 MySQL 企业版可以支持更多高级功能…...

QMK宏全面实战教程:从入门到精通(附17个实用案例)(理论部分)

🎯 QMK宏全面实战教程:从入门到精通(附17个实用案例) 大家好!作为一名机械键盘DIY爱好者和QMK固件深度玩家,今天我要带大家彻底掌握QMK宏的使用技巧!无论你是刚接触机械键盘的新手,还是想提升定制化水平的老玩家,这篇包含17个实战案例的教程都能满足你的需求! 🔍…...

H3C网络设备(交换机、路由器、防火墙)常用命令整理

H3C网络设备&#xff08;交换机、路由器、防火墙&#xff09;的常用命令整理。 一、H3C交换机常用命令 1. 基础操作 命令说明system-view进入系统视图quit返回上一级视图save保存配置display current-configuration查看当前配置&#xff08;类似 show run&#xff09;display…...

从前序与中序遍历序列构造二叉树(中等)

先从前序遍历列表取出第一个元素&#xff0c;这个元素就是根节点&#xff0c;然后从中序遍历中找到这个根节点&#xff0c;节点左侧就是该节点的左子树的节点集合&#xff0c;右侧就是该节点的右侧节点集合&#xff0c;然后递归构建左右子树。 /*** Definition for a binary t…...

ASP.NET/IIS New StreamContent(context.Request.InputStream) 不会立即复制整个请求流的内容到内存

StreamContent 的工作原理与内存占用 New StreamContent(context.Request.InputStream) 不会立即复制整个请求流的内容到内存。这个操作只是创建一个包装器&#xff0c;将原始的请求流&#xff08;context.Request.InputStream&#xff09;封装在 StreamContent 对象中&#x…...

Java大师成长计划之第24天:Spring生态与微服务架构之分布式配置与API网关

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4-turbo模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在微服务架构中&#xff0c;如何管理…...

Spring Security vs Shiro vs Sa-Token

一句话总结&#xff1a; Spring Security&#xff1a;大公司专业保安队&#xff0c;功能全面但配置复杂Shiro&#xff1a;轻便灵活的安保工具包&#xff0c;上手简单但功能有限Sa-Token&#xff1a;国产智能门禁系统&#xff0c;开箱即用&#xff0c;代码极简 对比表格&#x…...

MongoTemplate 基础使用帮助手册

前言 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;适合存储大量的非结构化数据。MongoTemplate 是 Spring Data MongoDB 中的一个核心组件&#xff0c;它提供了一组丰富的 API 来与 MongoDB 进行交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD 操…...

CCIE与HCIE哪个考试难度更大?

CCIE&#xff08;思科认证互联网专家&#xff09;与HCIE&#xff08;华为认证ICT专家&#xff09;的考试难度差异体现在技术体系、实验要求及评分标准。2023年全球数据显示&#xff0c;CCIE通过率约25%&#xff0c;HCIE通过率32%&#xff0c;但通过率不能完全反映实际挑战。 C…...

子查询对多层join优化记录

需求背景 查询某个用户是否具有某个角色 表 CREATE TABLE mdm_platform_role_user (ID bigint NOT NULL AUTO_INCREMENT,ROLE_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,USER_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci …...

容器编排利器-k8s入门指南

Kubernetes(K8s)入门指南:容器编排利器 什么是 Kubernetes? Kubernetes(常简称为K8s)是一个开源的容器编排平台,由 Google 开源并交由云原生计算基金会(CNCF)管理。它可以帮助我们自动化部署、扩展和管理容器化应用程序。 为什么需要 Kubernetes? 在微服务架构盛行的今…...

MyBatis—动态 SQL

MyBatis—动态 SQL 一、动态 SQL 的核心作用 动态 SQL 主要解决以下问题&#xff1a; 灵活性&#xff1a;根据不同的输入参数生成不同的 SQL 语句&#xff08;如条件查询、批量操作&#xff09;。 可维护性&#xff1a;减少重复代码&#xff0c;通过标签化逻辑提高 SQL 可读…...

解决“VMware另一个程序已锁定文件的一部分,进程无法访问“

问题描述 打开VMware里的虚拟机时&#xff0c;弹出"另一个程序已锁定文件的一部分&#xff0c;进程无法访问"如图所示&#xff1a; 这是VM虚拟机的保护机制。虚拟机运行时&#xff0c;为防止数据被篡改&#xff0c;会将所运行的文件保护起来。当虚拟机崩溃或者强制…...

如何创建一个不可变类

写在前面 如果对象在构造后无法更改&#xff0c;则该对象是不可变的。不可变对象不会以任何方式暴露其他对象来修改其状态; 对象的字段仅在构造函数内初始化一次&#xff0c;并且永远不会再次更改。 1.不可变类的用法 如今&#xff0c;每个软件应用程序的*“必备”规范都是分…...

outbox架构解说

Outbox 模式是一种用于实现数据一致性的架构模式&#xff0c;特别是在微服务架构中。 它确保在处理事务时&#xff0c;数据的原子性和最终一致性。 Outbox 模式的详细解说&#xff1a; 1. 概念与背景 背景&#xff1a;在微服务架构中&#xff0c;一个操作可能涉及多个服务&…...

PT2020 20触控I2C输出IC

1&#xff0e;产品概述 ● PT2020是一款电容式触摸控制ASIC&#xff0c;支持20通道触摸输入&#xff0c;I2C键值输出。可通过I2C调节灵敏度以及功能设置。算法带有走线自补偿功能&#xff0c;具有高抗干扰、宽工作电压范围的突出优势。适用于小家电&#xff0c;智能门锁等消费类…...

【GAN网络入门系列】一,手写字MINST图片生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…...

数据备份与恢复方案

数据备份与恢复方案 一&#xff0e;背景 为确保公司信息安全&#xff0c;防止关键数据丢失&#xff0c;应对突发事件&#xff0c;特制定全面的数据备份与恢复方案。该方案将对公司的各类文件资料进行分级管理&#xff0c;并针对不同级别的数据设定相应的备份策略和恢复流程。 二…...

Go的单测gomock及覆盖率命令

安装gomock&#xff1a; go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen 使用 mockgen 生成 mock 代码: 参考 mockgen -sourceservice/user.go -destinationservice/mocks/mock_user_service.go -packagemocks go test -coverprofilecoverage.out…...

淘宝商家层级存在流量上限怎么办,如何突破流量上限?

在淘宝平台运营中&#xff0c;许多商家都会遇到一个共同难题&#xff1a;随着店铺层级的提升&#xff0c;流量增长却逐渐触及天花板。这种现象背后隐藏着平台复杂的流量分配机制&#xff0c;但并非无法破解。 一、流量上限的底层逻辑 淘宝根据商家层级&#xff08;1-7层&…...

【linux】Web服务—搭建nginx+ssl的加密认证web服务器

准备工作 步骤&#xff1a; 一、 新建存储网站数据文件的目录 二、创建一个该目录下的默认页面&#xff0c;index.html 三、使用算法进行加密 四、制作证书 五、编辑配置文件&#xff0c;可以选择修改主配置文件&#xff0c;但是不建议 原因如下&#xff1a; 自定义一个配置文…...

MySQL MCP 使用案例

## 概述 MySQL MCP&#xff08;MySQL Multi-Channel Protocol&#xff09;是MySQL的多通道协议实现&#xff0c;提供了高效的数据库连接池和负载均衡功能。本文档将介绍MySQL MCP的基本使用方法和常见案例。 ## 环境准备 ### 安装MySQL MCP bash pip install mysql-mcp ### 基…...

C#中UI线程的切换与后台线程的使用

文章速览 UI线程切换示例 后台线程使用示例 两者对比适用场景Application.Current.Dispatcher.InvokeTask.Factory.StartNew 执行同步性Application.Current.Dispatcher.InvokeTask.Factory.StartNew 一个赞&#xff0c;专属于你的足迹&#xff01; UI线程切换 在WPF应用程序…...

实验-实现向量点积-RISC-V(计算机组成原理)

目录 一、实验内容 二、实验步骤 三、源代码 四、实现效果 五、实验环境 六、实验小结与思考 一、实验内容 首先&#xff0c;我们用一个简单的“向量点积”运算作为热身。你将拿到一个不完整的汇编代码“task2-向量点积”&#xff0c;我们的目标是按照C语言描述的功能&a…...

【软考 霍夫曼编码的文档压缩比】

霍夫曼编码的文档压缩比计算基于字符频率的最优编码分配&#xff0c;以下是详细步骤及相关案例&#xff1a; 一、压缩比计算公式 [ \text{压缩比} \frac{\text{压缩前总比特数}}{\text{压缩后总比特数 编码表存储开销}} ] 通常以 比率&#xff08;如 3:1&#xff09; 或 百分…...