惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Blog — PlanetScale
Blog — PlanetScale
小众软件
小众软件
F
Fortinet All Blogs
博客园 - 叶小钗
博客园_首页
D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
博客园 - Franky
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
IT之家
IT之家
M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog

博客园 - 优雅旋律

四角号码 对照表 ScriptManager Bug Application_Start 不执行 loading 关机效果 ZT Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景] ZT 数据库范式浅解 ZT 数据库设计系列:数据库设计5步骤 ZT Web Control 开发系列(一) 页面的生命周期 Resharper 4.0 终于RC了... GridView、DetailsView、FormView 、Repeater、DataList的区别 (ZT) 常用正则表达式 ZT linq(update) 更新用 自动赋值方法 利用对象序列化将购物车保存在Cookie中 (ZT) ajax tab 动态设置主题(Theme) 一些注意 持久化数据 关于vs2008的Eval方法 重大失误 datapager分页问题 (点击两次)
MarcHandler (Marc ISO2709)
优雅旋律 · 2008-07-02 · via 博客园 - 优雅旋律

 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.数据区:目次区字段名所对应的值,(字段分隔符分隔,其中包含的子字段由子字段分隔符分隔);相当于值