热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MARC格式的分析处理转换及在VB中的实现

由于我们的作业马上就要交了,然而网上的求助信息却没有一个人给我答案,所以自己不得不硬着头皮想了。通过翻阅资料以及自己的努力,我的MARC处理程序总算是有结果了,为了让与我有同样问题的人能够快

     由于我们的作业马上就要交了,然而网上的求助信息却没有一个人给我答案,所以自己不得不硬着头皮想了。通过翻阅资料以及自己的努力,我的MARC处理程序总算是有结果了,为了让与我有同样问题的人能够快速的解决,我决定把自己的心得与大家一起分享!下面就是一条Marc记录:
00931nam0 2200253   450 0010010000000050017000100100028000271000041000551010008000961020015001
0410500180011910600060013720001550014321000310029821500160032933001750
03456060047005206060013005676060013005806060009005936900014006027110
03900616801002200655a7-115-08909-4dCNY15.00  a20030821d2003    em y0chiy0110    ea0 achi  aCNb110000  ay   z   000yy  ar1 a高职高专院校人才培养工作水平评估资料汇编9gao zhi gao zhuan yuan xiao ren cai pei yang gong zuo shui ping ping gu zi liao hui bianf教育部高等教育司编  a北京c人民邮电出版社d2003  a244页d20cm  a本书内容大体可分为五部分:国家、教育部关于高职高专教育改革、发展以及就业等方面的重要法规和文件;教育部有关领导讲话;高职高专院校人才培养工作水平评估系列文件及评估方案等。0 a高等教育x职业教育x人才x培养x评估y中国0 a高等教育0 a职业教育0 a人才  aG718.5v402a教育部9jiao yu bub高等教育司4编 0aCNbNLCc20031107

一、Marc数据格式介绍:
    我们对Marc记录进行一些简单的介绍。它是一种专供计算机程序识别的机读目录。为便于计算机去识别和处理 ,MARC记录必须按一定格式进行存放 ,它统一由记录头标区、地址目次区和数据区四部分构成。

    记录头标区,位于 MARC记录的首部 ,其长度均为 2 4个字符。即(00931nam0 2200253   450)其中第0 - 4位字符为该MARC记录的总长度 ,第1 2 -1 6位为MARC记录数据基地址。它的值等于头标区长度与目次区长度之和。
    地址目次区,紧跟记录头标区之后。它由若干个款目组成 ,每个款目均为12个字符 ,依次可分为三个部分 :字段标识符、字段长度、字段起始地址 ,它们分别占3、4、5个字符宽度其中即(0010010000000050017000100100028000271000041000551010008000961020015001
0410500180011910600060013720001550014321000310029821500160032933001750
03456060047005206060013005676060013005806060009005936900014006027110
03900616801002200655) ,字段起始地址是相对于数据基地址而言的。
    数据区,由一些可变长数据字段组成,除 001和005字段由数据和一个字段分隔符组成外,其余每个字段均由两个指示符后接若干子字段组成。每个子字段又以一个子字段标识符开始 ,后接变长数据。每个字段都以一个字段分隔符结尾。每个记录都以一个记录分隔符结尾。
因 MARC记录中使用的记录分隔符、字段分隔符和子字段分隔符为不可见ASCII码控制字符,所以在程序中对这些字符进行识别时,直接使用其 ASCII值来表示相应的控制符号,数据区的字段分隔符为的ASCII码30 ,子字段的分隔符为ASCII码31,记录分隔符为ASCII码29。

二、程序思想:
 1.取得记录的总长度,即取得头标区的0-4位。
 2.取得数据基地址,即取得头标区的12-16位。
 3.取得目次区的内容,即通过"数据基地址 - 头标区长度",取得目次区的长度再通过Mid(Marc记录,25,目次区长度)取得目次区的内容。
 4.取得数据区的内容,即通过"总长度 - 数据基地址",取得数据区的长度,再通过Mid(Marc记录,数据基地址,数据区长度)取得数据区的内容。
 5.取得目次区字段的个数,通过"目次区长度/24"得到。
 6.取得数据区字段的个数及其数据,通过Unbound(split(marc记录,chr(30)))取得字段个数,通过split函数返回的数组取得每个字段的数据。

三、程序实现(Visual basic6.0)
       Option Explicit
       Dim restr As String '返回值
       Public Function marc(aa As String, b As String, c As String) As String  '自定义marc函数,其中aa表示Marc记录,b表示字段标识符,c表示子字段标识符
               Dim slen As Integer 'marc记录总长度
                Dim adress As Integer ‘数据基地址
                Dim sum As Integer  ’字段的个数
                Dim tag As String   ‘字段标识符
                Dim middle As String ’目次区内容
                Dim data As String ‘数据区内容
                Dim xx As Variant '数据字段数组
                Dim zz As Variant '数据子字段数组
                Dim x As Integer   
                Dim jsq As Integer  ’记数器
                Dim temp As Variant ‘临时数组

                slen = Val(Mid(aa, 1, 5))
                adress = Val(Mid(aa, 13, 5))
                sum = (adress - 24) / 12
                middle = Mid(aa, 25, adress - 24 - 1)
                data = Mid(aa, adress, slen - adress + 1)

                x = 1
                jsq = 1
                tag = ""
                temp = Split(data, Chr(30))
                sum = UBound(temp) ' return the max array number,LBound() return the min array number
                While jsq <= sum '通过while函数寻找匹配的字段标识符
                     tag = Mid(middle, x, 3) ' 字段标识符
                    If tag = b Then
                      xx = Split(data, Chr(30)) '数据字段数组
                      start = InStr(1, xx(jsq), c) '子字段起始地址
                      finish = InStr(start + 1, xx(jsq), "$") '子字段结束地址
                      If finish                        restr = Mid(xx(jsq), start + 2, Len(xx(jsq)) - start - 1) '当该子字段为字段最后子字段时的内容
                      Else
                       restr = Mid(xx(jsq), start + 2, finish - start - 2) '子字段内容
                      End If
                 End If
                jsq = jsq + 1
                 x = x + 12
             Wend
  End Function
   
     ’调用函数时
     private sub command_click()
     dim aa as string
     aa="00931nam0 2200253   450 0010010000000050017000100100028000271000041000551010008000961020015001
0410500180011910600060013720001550014321000310029821500160032933001750
03456060047005206060013005676060013005806060009005936900014006027110
0390061680100220065500243442020031106133602.0  a7-115-08909-4dCNY15.00  a20030821d2003    em y0chiy0110    ea0 achi  aCNb110000  ay   z   000yy  ar1 a高职高专院校人才培养工作水平评估资料汇编9gao zhi gao zhuan yuan xiao ren cai pei yang gong zuo shui ping ping gu zi liao hui bianf教育部高等教育司编  a北京c人民邮电出版社d2003  a244页d20cm  a本书内容大体可分为五部分:国家、教育部关于高职高专教育改革、发展以及就业等方面的重要法规和文件;教育部有关领导讲话;高职高专院校人才培养工作水平评估系列文件及评估方案等。0 a高等教育x职业教育x人才x培养x评估y中国0 a高等教育0 a职业教育0 a人才  aG718.5v402a教育部9jiao yu bub高等教育司4编 0aCNbNLCc20031107"
     aa = Replace(aa, Chr(31), "$") '把子字段的分隔符换成$,以便在处理时进行分割
     Call marc(aa, "200", "$a") '调用函数,取得题名
     text1.text=restr  '在文本框中显示题名信息
     end sub

四、总结
        通过上面的介绍,我已经把其处理过程及程序全部,写完了不知道对大家有没有帮助,如果有什么问题,欢迎发表评论!!!


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
author-avatar
狗狗狗699_250
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有