热门标签 | 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

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


推荐阅读
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了一个从入门到高手的VB.NET源代码,通过学习这些源代码,可以在21天内成为VB.NET高手。文章提供了下载地址,并提醒读者加入作者的QQ群和收藏作者的博客。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
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社区 版权所有