程序读取ISO-2079格式的MARC数据

2018-12-04 22:06

程序读取ISO-2079格式MARC

http://blog.sciencenet.cn/blog-220689-473952.html

已有 3787 次阅读 2011-8-10 22:33 |个人分类:工作心得|系统分类:观点评述|关键词:MARC;ISO-2079|文章来源:转载

一、ISO-2079,即(Documentation Format for bibliographic information interchange on magnetic tape)文献信息交换用磁带格式,具有以下特点:

(1)文档目录的基本信息由一个24位固定长头标区存放,包括:文档字符长度,指示字符长度与字段标识符长度。

(2)一个字段的信息由若干个12位固定长度字符组成,包括字段标识、字段长度与字段在文档中的起始符。

(3)文档为不定量、不定字长的数据元素。 (4)以字段指示符控制字段信息。 (5)字段可重复,子字段也可重复。 二、CNMARC

CNMARC,即中国机读目录格式,它是在UNIMARC基础上,根据中文文献的特点研制的。 (1)CNMARC的记录结构与通用MARC一样含有4个部分:记录头标区、地址目录区、数据字段区与记录分隔符。

(2)CNMARC数据有5个层次,即:数据元素-子字段-字段-功能块-数据字段区。 (3)CNMARC数据字段区有10个功能块: 0-标识块 1-编码信息块 2-著录信息块 3-附注块 4-款目连接块 5-相关题名块 6-主题分析块 7-知识责任者块。 8-国际使用块 9-国内使用块

(4)CNMARC数据字段区的标识系统有3种符号组成,即:标识符,指示符与分隔符,它与通用MARC的标识符号系统一致。

(5)CNMARC有170多个字段,其中包括必备字段与选择字段,可重复字段与不重复字段,仅适用于特定文献类型的字段,CNMARC中多数字段可以在一份文档中重复出现,其001、005、010、100、101、102、105、106、123、200、205、210、215、225、300、461、500、686、701、702、711、712、801、905为必备字段。CNMARC在修订版中增加了856字段—电子文件地址与检索,为快速增长的数字化文献的描述服务。

(6)CNMARC附录有5种代码表格:文献类型标识符号、常用语言代码、GB2659常用国家和地区名代码、GB2260中华人民共和国行政区划代码、缩微中心与各拍摄馆代码。

机读目录载体信息密度高,信息量大,工作人员录入一条记录,可多次输出,可以为用户提供多种检索途径。计算机编目软件可对每条记录自动排序,节省了昔日图书馆员组织目录的大量

时间。计算机编目,目录维护方便。有了MARC,全国可以形成统一的编目机制,一条款目形成后,联网上载,全国可以共享。有了MARC,OPAC服务才能成为可能。MARC为图书馆采购,编目服务,为图书馆管理提供了极大的方便。

全球使用的MARC有多种,但其主要的字段是一致的,这为资源文档的交流与转换奠定了基础,为资源的共知,共建,共享打开了方便之门。 三、程序读取

读取marc数据实质就是解析MARC记录,根据MARC数据的特点,MARC记录的目次区是由若干个目次项组成。它的作用是进一步向计算机指示目录数据描述信息,记录所有数据字段位置的索引,包括每个数据字段的字段标识符、长度、位置和说明符,以便使计算机更方便地进行查找处理。因此首先要通过程序解析MARC记录的所有字符、字符的位置及长度;然后根据获取的字符、字符位置及长度获取每个字符的内容。

public const char FLDEND = (char)30; // 子字段结束符:@ public const char RECEND = (char)29; // 记录结束符:% public const char SUBFLD = (char)31; // 子字段开始符:$

public constint HEAD_LEN = 24;//头标区长度

private string sPath = \ private string sBakPath = \ private string sCon = \ privateDataSet ds = null;

///

/// 需要转换的字段 ///

private string sFLD = \ publicOPACLoading(string spath,stringsbakpath,stringscon) {

sPath = spath; sCon = scon; sBakPath = sbakpath; }

///

/// 根据路径加载文件 /// public void Loading() {

if (!Directory.Exists(sPath)) return;

try {

stringsLocalConstr = \

OleDbConnectionocon = new OleDbConnection(sLocalConstr); ocon.Open();

ds = new DataSet();

OleDbDataAdapteroAdapt = new OleDbDataAdapter(\OPAC_BookInfo where 1>1\

OleDbCommandBuilderocBuild = new OleDbCommandBuilder(oAdapt); oAdapt.Fill(ds, \

DirectoryInfo di = new DirectoryInfo(sPath); FileInfo[] fis = di.GetFiles(); foreach (FileInfos infis) {

//StreamReader r1 = new StreamReader(s.FullName, Encoding.Default); //string ss = r1.ReadToEnd();

FileStream fs = s.Open(FileMode.Open, FileAccess.Read); boolbRead = false; try {

if (bRead = ReadingLine(fs))//解析成功 {

if (ds.Tables[\ {

oAdapt.Update(ds.Tables[\ ds.Tables[\ } } }

catch (Exception ex) {

bRead = false;

Console.WriteLine(s.FullName); } finally {

fs.Close(); if (bRead)

File.Move(s.FullName, sBakPath + \ } }

ocon.Close(); }

catch (Exception e)

{

return; } }

///

/// 解析marc数据 ///

///

private bool ReadingLine(FileStream stream) {

boolbOK = true;

try {

StreamReadersread = new StreamReader(stream,Encoding.Default);

stringsTmpLine = sread.ReadToEnd(); if (sTmpLine != null) {

if (string.IsNullOrEmpty(sTmpLine)) return false; sTmpLine = sTmpLine.Trim();

if (sTmpLine.Length< 6) return false;

string[] sRecs = sTmpLine.Split(RECEND); for (inti = 0; i

if(string.IsNullOrEmpty(sRecs[i]))continue; AnalysisOPAC(sRecs[i]); }

} }

catch (Exception e) {

bOK = false; }

returnbOK; }

///

/// 解析单条OPAC纪录 ///

///

private bool AnalysisOPAC(string sLine) {

boolbOK = true;

stringsMuCi = GetMC(sLine);

stringsData = sLine.Substring(HEAD_LEN + sMuCi.Length).Trim(); Hashtableht = FormFld(sMuCi); bOK = FormBookInfo(ht, sData,sLine);

returnbOK; }

///

/// 生成图书详细信息 ///

///

private bool FormBookInfo(Hashtableht, string sData,stringsSRC) { try {

DataRowdrNew = ds.Tables[\

string[] sTmpData ; ///010字段

FldInfofiTmp = (FldInfo)ht[\ if (fiTmp != null) {

sTmpData = GetString(sData, fiTmp.Star, fiTmp.Len).Split(SUBFLD); for (inti = 0; i

if (sTmpData[i].StartsWith(\sTmpData[i].TrimStart('a');

if (sTmpData[i].StartsWith(\sTmpData[i].TrimStart('d'); } }


程序读取ISO-2079格式的MARC数据.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:管理沟通案例分析(杨瑞的困惑) 材料及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: