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(04);
50             数据基地址 = Record.Substring(125);
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 { setget; }
91         public string 出版社 { setget; }
92         // 自己添加 
93     }
94 }
95 

Marc数据格式:(记录分隔符分隔)
        1.记录头标区:24 位,0 - 4位字符为该记录的总长度 ,1 2 -1 6位为数据基地址。它的值等于头标区长度与目次区长度之和,即数据基地址-24=目次区长度;相当于表信息
        2.目次区:12位*n个 组成 (字段分隔符分隔) ,字段标识符(3)  字段长度(4)  字段起始地址(5);相当于列名
        3.数据区:目次区字段名所对应的值,(字段分隔符分隔,其中包含的子字段由子字段分隔符分隔);相当于值
posted on 2008-07-02 17:10  优雅旋律  阅读(389)  评论(0编辑  收藏  举报