MarcHandler (Marc ISO2709)

 

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Text;
 5 
 6  namespace  ISO2709
 7  {
 8       public   class  MarcHandler
 9      {
10           private   const   char  记录分隔符  =  ( char ) 29 ;
11           private   const   char  字段分隔符  =  ( char ) 30 ;
12           private   const   char  子字段分隔符  =  ( char ) 31 ;
13 
14           private   const   int  头标区长度  =   24 ;
15           private   const   int  字段长度  =   12 ;
16 
17 
18 
19           public   string  Record;
20           public  MarcHandler( string  Record)
21          {
22               this .Record  =  Record;
23          }
24 
25 
26           private  Record SingleRecordHandler( string  Record)
27          {
28              var result  =   new  Record();
29 
30               int  记录总长度;
31               int  数据基地址; // 目次区结束位置
32 
33 
34               int  目次区长度;
35               string  目次区内容; // 每个12位:字段标识符(3)  字段长度(4)  字段起始地址(5) ;        字段标识符 应查找对应字段名
36 
37               int  字段个数;
38               int  字段标识符;
39 
40               int  数据区长度;
41               string  数据区内容; // 个数对应 目次区中的字段个数
42 
43               string [] 数据字段数组;
44               string [] 数据子字段数组;
45 
46               int  i;
47               string [] tmp;
48 
49              记录总长度  =  Record.Substring( 0 4 );
50              数据基地址  =  Record.Substring( 12 5 );
51 
52              目次区长度  =  数据基地址  -  头标区长度  +   1 ;
53              目次区内容  =  Record.Substring(头标区长度, 目次区长度);
54              字段个数  =  目次区长度  /  字段长度;
55 
56              数据区长度  =  记录总长度  -  数据基地址;
57              数据区内容  =  Record.Substring(数据基地址, 数据区长度);
58 
59               // 配置文件:数字与字段名映射(01-ISBN,010-出版社等)
60               // 1.得到所有字段标识符
61               // 2.取得数据区内容与目次区字段标识符的对应字段构建Table(依次对应,注意有子字段,通过"子字段分隔符"分隔)
62               // 3.如果"字段标识符"的数字与配置文件中的数字相同,设置实体类Record中相应字段的值 
63 
64               return  result;
65          }
66 
67           public  IEnumerable < Record >  RecordSplit()
68          {
69              var result  =   new  List < Record > () ;
70 
71              var RecordList = Record.Split(记录分隔符);
72               foreach  (var r  in  RecordList)
73              {
74                  result.Add(SingleRecordHandler(Record));
75              }
76          }
77 
78           public   void  ToExcel()
79          {
80               foreach  (var r  in  RecordSplit())
81              { 
82                   // 导出到Excel
83              }
84          }
85   
86      }
87 
88       public   class  Record
89      {
90           public   string  ISBN {  set get ; }
91           public   string  出版社 {  set get ; }
92           //  自己添加 
93      }
94  }
95 

Marc数据格式:(记录分隔符分隔)
        1.记录头标区:24 位,0 - 4位字符为该记录的总长度 ,1 2 -1 6位为数据基地址。它的值等于头标区长度与目次区长度之和,即数据基地址-24=目次区长度;相当于表信息
        2.目次区:12位*n个 组成 (字段分隔符分隔) , 字段标识符(3)  字段长度(4)  字段起始地址(5);相当于列名
        3.数据区:目次区字段名所对应的值,(字段分隔符分隔,其中包含的子字段由子字段分隔符分隔);相当于值

转载于:https://www.cnblogs.com/limxc/archive/2008/07/02/1234158.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值