作者:狗狗狗699_250 | 来源:互联网 | 2023-05-16 10:46
由于我们的作业马上就要交了,然而网上的求助信息却没有一个人给我答案,所以自己不得不硬着头皮想了。通过翻阅资料以及自己的努力,我的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
四、总结
通过上面的介绍,我已经把其处理过程及程序全部,写完了不知道对大家有没有帮助,如果有什么问题,欢迎发表评论!!!